递归的2个条件:调用函数自身;有正确的返回条件
>>> def factorial(n): #没有递归
result = n
for i in range(1,n):
result=result*i
return result
>>> factorial(4)
24
>>> def factorial(n): #有递归
if n ==1:
return 1
else:
return n*factorial(n-1)
>>> factorial(4)
24
设置递归的次数
>>> import sys
>>> sys.setrecursionlimit(1000)
斐波那契数列递归算法
F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)
>>> def fff(n):
if n==1 or n==2:
return 1
else:
return fff(n-1)+fff(n-2)
>>> fff(5)
5
>>> fff(7)
13
>>> fff(20)
6765
汉诺塔递归算法
>>> def hanoi(n,x,y,z):
if n==1:
print(x,'->',z)
else:
hanoi(n-1,x,z,y) #将上面的n-1个盘子从x挪到y
print(x,'->',z) #将最下面的最后一个盘子从x挪到z
hanoi(n-1,y,x,z) #将 y上的n-1个盘子挪到z上
>>> hanoi(4,'x','y','z')
x -> y
x -> z
y -> z
x -> y
z -> x
z -> y
x -> y
x -> z
y -> z
y -> x
z -> x
y -> z
x -> y
x -> z
y -> z