美文网首页
递归算法思想

递归算法思想

作者: CCCCCccccccch | 来源:发表于2019-11-21 23:23 被阅读0次

    在编写计算机程序时,有时使用递归算法可以有效解决一些问题,递归算法往往使算法的描述简洁而且易于理解。

    递归算法,就是一种直接或者间接地调用自身的算法:

    递归算法的具体实现过程一般通过函数(或子过程)来完成,在函数(或子过程)的内部,编写代码直接或间接调用函数(或子过程)本身,即可完成递归操作。

    从递归算法的实质可以看出,递归算法也是一种循环,只是这种循环不是使用程序设计语言的循环语句来实现,而是循环调用函数(或子过程)自身来实现的。要实现这种循环,一般有三个要求:

    1、每循环调用一次,求解问题的规模都要有所缩小,即将求解的问题化为一个缩小了的子问题;

    2、相邻的两次循环之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

    3、当子问题的规模极小时,应该能直接给出解答而不再进行递归调用(即必须有一个结束递归的条件),因而每次递归都是有条件的,无条件递归调用将会使程序进入死循环而不能正常结束(最终导致堆栈溢出)。

    由以上递归算法的要求可以看出,在使用递归算法解决问题时,需要注意以下几点:

    1、在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口;

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

    3、在递归调用的过程中,系统将每一次递归调用的返回点、局部变量等保存在系统的栈中,当递归调用次数太多时,就可能造成栈溢出错误。

    实例:求阶乘

    理解递归算法最简单的例子就是:编写程序求n的阶乘(n!):

    function factorial(n){

    if( n < 1 ){

    return 1

    }

    return n*factorial( n - 1 )

    }

    相关文章

      网友评论

          本文标题:递归算法思想

          本文链接:https://www.haomeiwen.com/subject/zvotwctx.html