递归的思想
以此类推是递归的基本思想。
具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。
递归的两个条件
(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
转载于:深入理解递归
本文介绍了递归算法的基本思想,即通过将大问题分解为小问题来解决,并详细解释了递归调用和递归出口的概念。同时,文章还提供了求解斐波那契数列的递归算法Python实现示例。
1906

被折叠的 条评论
为什么被折叠?



