递归的思想
以此类推是递归的基本思想。
具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
递归的两个条件
(1)可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
(2)存在一种简单情境,可以使递归在简单情境下退出。(递归出口)
递归算法的一般形式
def func(mode): if endCondition: return else: func(mode_small)
递归的过程
在求解6的阶乘时,递归过程如下所示。
我们会惊奇的发现这个过程和栈的工作原理一致,递归调用就是通过栈这种数据结构完成的。整个过程实际上就是一个栈的入栈和出栈问题。然而我们并不需要关心这个栈的实现,这个过程是由系统来完成的。
那么递归中的“递”就是入栈,递进;“归”就是出栈,回归。
递归的例子
斐波那契数列
斐波那契数列的递推公式:
Fib(n)=Fib(n-1)+Fib(n-2)
指的是如下所示的数列:
1、1、2、3、5、8、13、21.....
Python实现
class sf(): def fib(self,n): if n == 1: return 1 elif n == 2: return 1 else: return self.fib(n-1)+self.fib(n-2) if __name__ == '__main__': a = sf() for i in range(1,10): print(a.fib(i))
输出结果
1 1 2 3 5 8 13 21 34
转载于:深入理解递归