递归算法的特点:
1,自己调用自己(直接递归)或者通过其他函数调用自己(间接递归)
2,在使用递归时,必须有一个明确的递归结束条件
3,递归算法可以简化问题,但是运行效率低,一般不提倡使用递归
用递归解决问题:
阶乘
斐波那契数列
二项式
斐波那契0、1、1、2、3、5、8、13、21
递归:
def f (n): if n==1: return 0 if n==2: return 1 else: return f (n-1)+f (n-2) for i in range(10): print(f (i+1)) #因为i是从0开始的
提示:i到30以后计算时间会变得非常慢
还有一种方法是迭代:
count/step |
num1 |
num2 |
num3 |
1 |
1 |
1 |
|
|
|
1 |
2 |
2 |
2 |
1 |
|
|
|
2 |
3 |
3 |
3 |
2 |
|
|
|
3 |
5 |
4 |
5 |
3 |
|
def fabonacci_2(n): num1=0 num2=1 count=1 if n==1: return 0 elif n==2: return 1 while count<n: num3=num2+num1 num2=num1 num1=num3 count+=1 return num1 for i in range(10): print(fabonacci_2(i+1))
阶乘
1*2*3*4*...=...
递归:
def f(n): if n==1: return 1 else: return f(n-1)*n
迭代:
def factory(n): count=1 result=1 facEval="1" while count<n: result*=count count+=1 facEval+="*%s"%count result*=count print("%s=%s"%(facEval,result)) #打印出公式 return result
现在有一个Ackerman函数a(m,n)
要求用递归和迭代求
#这种题目递归最容易实现的,照抄就行 def A(m,n): if m==0: return n+1 elif n==0: return A(m-1,1) else: return A(m-1,A(m,n-1)) print(A(2,3))
这种题目我以前不知道该怎么做,今天网上偶尔查到了数学归纳法这种好东西,帮我把问题解决了