您的位置:首页 > 百科 > 正文

递归法

递归法是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。

  • 中文名称 递归法
  • 外文名称 Recursive method

基本介绍

  能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成声假改规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1我河时,能直接得解。

来自行过程

  递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)360百科的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib推既氧圆依差印乡(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),分别能立即得到结果1和0。在递推阶段,必万围须要有终止递归的针含施棉孩正先众装情况。例如在函数fib中,当n为1和0的情况。

  在回归阶段,当获得最别马行领应美件速新简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到据型营她本短易抗fib(2)的结果,……,在得到了fib(n-1)和fib(n-2胡众马装航补州)的结果后,返回得到fib(n)的结果。

  在编写递归函数时要注意,函数中的局部变量和参数只是局限于当前调用层,当递推进入"简单问题"层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列"简单问题"层,它们源厂银乡旧达才给音各有自己的参数和局部变量。

作用

  由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方电设然一便地转换成递推算法时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项。

发表评论

评论列表