迭代与递归,斐波拉系数和汉诺塔

递归 满足递归的2个条件:定义函数时,调用自己. 要有一个正确的停止条件. 出来混一定要还才是递归.

例子:

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))

迭代实现斐波拉契数列

def abc(n):
n1=1
n2=1
n3=1

if n<1:
print('输入错误!')
return -1

while (n-2)>0:
n3=n2+n1
n1=n2
n2=n3
n-=1

return n3
result=abc(20)
if result!=-1:
print('总共有%d对小兔子诞生!' % result)

递归实现斐波拉契数列

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)

result=fab(20)
if result!=-1:
print('总共有%d对小兔子诞生!' % result)

PS:递归运算次数太多并不如迭代好用

汉诺塔  #原理懂了,但是这里代码是如何print出X -->Y这些有疑问

def hannot(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
hannot(n-1,x,z,y) #将N-1个盘子从X移动到Y上
print(x,'-->',z) #将最底下的盘子移动到Z上
hannot(n-1,y,x,z) #将Y上的N-1个盘子移动到Z上
n=int(input('请输入汉诺塔的层数:'))
hannot(n,'x','y','z')

原文地址:https://www.cnblogs.com/009NotFound/p/10455965.html