递归算法
1、求一个数n的阶乘;
f(n) = n*(n-1)*(n-2) … *2*1 展开表达式 或 f(n) = n*f(n-1) 递归表达式
f(4) 的阶乘
f(4)= 4 * f(3)
3* f(2)
2* f(1)
1
因为f(n)与f(n-1)有关系,即基于其子问题,于是便可以采用“递归”求解。
def func (n):
if n == 1: #结束标志
return 1
else: return n * func (n - 1)
可视化直观表示即:
递归其实可以看做两部分操作,
一步步去寻求子问题的解(直到满足限制条件,如n==1,得f(1)=1)是“递” ;
得到最基本的子问题的解之后,再一步步返回求上一层的解是“归”。
2、斐波那契数列(递归法)
斐波那契数列指的是这样的一个数列:
0,1,1,2,3,5,8,13,21, ==>f(n)......从第3个数起,每个数都是 前两个数之和。
0 1 2 3 4 5 6 7 8 ==>n
代码如下:
def Fibonacci(n):
if n == 1:
return 1
elif n == 0:
return 0
elif n >= 2:
return Fibonacci(n - 1) + Fibonacci(n - 2)
当n=3时,求fibibacci(3)的值过程如下图所示
当n=4时,求fibibacci(4)的值过程如下图所示