深入理解递归

递归的思想

以此类推是递归的基本思想。

具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

递归的两个条件

(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


转载于:深入理解递归

猜你喜欢

转载自blog.csdn.net/dta0502/article/details/80807645