博客列表 >小猿圈之算法学习

小猿圈之算法学习

聆听的博客
聆听的博客原创
2019年07月19日 14:08:59413浏览

算法分为很多种,小猿圈加加这篇文章详解一下递归算法,很多地方都有用到,小编也是现学现卖,咱们一起来看看吧。

定义:递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

递归的原理,其实就是一个栈(stack), 比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈, 在把4的入栈,直到最后一个,之后呢在从1开始出栈, 看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢.

递归算法解决问题的特点:

  (1) 递归就是在过程或函数里调用自身。

  (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

  (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

  (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

递归过程一般通过函数或子过程来实现。

看一个案例:求n-1的阶乘?

实例

f(n)

{

 if(n == 0 || n == 1)

  {

  return 1;

  }

 else

  {

  return n*f(n-1); //自己调用自己,求n-1的阶乘

  }

}

运行实例 »

这就是递归原理...递归算法得有递归出口,否则就会死循环...递归算法效率较低,占用栈空间较大,容易发生栈溢出。

看过小猿圈加加这篇文章相信大家对递归算法有一个新的理解了,而且对迷迷糊糊的递归应该会清楚很多,有点自恋,别介意哈,小编也是从小猿圈学来的,一个免费的学习地方,大家有兴趣可以直接去看看,当然也可以看小编的文章啊!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议