递归

  • 栈非常重要的一个应用就是在程序设计语言中用来实现递归。递归是指在定义自身的同时又出现了对自身的引用。如果一个函数在其定义体内直接调用自己,则称为直接递归函数;如果一个函数经过一系列的中间调用语句,通过其他函数间接调用自己,则称为间接递归函数。

  • 许多数学函数是递归定义的,如二阶斐波那契数列定义和阿克曼函数定义


// 已知二阶fibonacci数列:fib(n)=0,若n=0;fib(n)=1,若n=1;fib(n)=fib(n-1)+fib(n-2),其他情况。定义递归函数求fib(n).

int fib(int n)
{
if(n==0)return 0;
else if(n==1)return 1;
else return fib(n-1)+fib(n-2);
}

  • 使用递归算法的前提有一下两个:

    • 原问题可以层层分解为类似的子问题,且子问题比原问题的规模更小。
    • 规模最小的子问题具有直接解。
  • 设计递归算法的原则是用自身的简单情况来定义自身。设计递归算法的方法如下:

    • 寻找分解方法:将原问题转化为子问题求解。例如,n! = n(n-1)!
    • 设计递归出口:根据规模最小的子问题确定递归终止条件。例如求解n!,当n = 1时,n! = 1
int f(int n)
{
    if (n == 0) return (1);
    else
        return (n * f*(n - 1));
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文有七千字,阅读大约需要占用你10分钟时间。 好吧。。随便写的,我也不知道会花多久看完。因为写的比较烂,而且只是...
    锅与盆阅读 12,568评论 5 36
  • 一般定义(来自网络):在调用一个函数的过程中又出现直接或间接地调用该函数本身,就是函数的递调用。 为求解规模为N的...
    2010jing阅读 2,885评论 0 1
  • 最近高等代数正好讲到这里,此篇文章正好对所学知识做一个具体程序实践。 设计算法时使用递归的思想是一个程序员的基本素...
    FrancisSoung阅读 10,035评论 2 3
  • 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大奖:点击这里领取 在...
    HetfieldJoe阅读 5,760评论 0 14
  • 弟弟需要找一张父母的合照,去参加一个母亲节的活动。 我刚想起,是否我这里存的有,便打开来寻找,想着可以发给他。后来...
    折草阅读 1,391评论 0 0