汉诺塔问题;树结构的定义;
python默认递归的深度是100层
我们可以手动设置递归设置递归的深度(1000):
>>>import sys
>>>sys.setrecursionlimit(1000);
例子(求阶乘):
非递归版本:
def factorial(n):
result = n
for i in rang(n):
result *=i
return result
number = int(input('输入整数:'))
result=factorial(number)
print("%d的阶乘是:%d" %(number,result))
递归版本:
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
number = int(input('输入整数:'))
result=factorial(number)
print("%d的阶乘是:%d" %(number,result))
斐波那契数列:
迭代;
#encoding=GBK
def fab(n):
n1=1
n2=1
n3=1
i=2
if n<1:
print("输入有误!")
return -1
if n==1|n==2:
return 1
while i<n :
n3=n1+n2
n1=n2
n2=n3
i+=1
return n3
number=int(input("请输入数:"))
re=fab(number)
print("%d的值为:%d" %(number,re))
递归:
#encoding=GBK
def fab(n):
if n<1:
print("输入有误!")
return -1
if n==1 or n==2
return 1
else:
return fab(n-1)+fab(n-2)
number=int(input("请输入数:"))
re=fab(number)
print("%d的值为:%d" %(number,re))
总结:把问题拆解成若干问题:分治思想
汉诺塔问题:
#encoding=GBK
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上
n= int(input("请输入汉诺塔层数:"))
hanoi(n,'x','y','z')