递归

xiaoxiao2021-02-28  100

汉诺塔问题;树结构的定义;  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')

 

转载请注明原文地址: https://www.6miu.com/read-80751.html

最新回复(0)