马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 慕良 于 2020-2-19 12:07 编辑
023-024递归:这帮小兔崽子与汉诺塔
斐波那契(Fibonacci)数列的递归实现(分治思想)
例1:兔子的繁衍
月数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 数量 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 144 |
求20个月后的兔子数量。
迭代:def fab(n):
n1 = n2 = n3 = 1
if n < 1:
print('输入有误!')
return -1
while (n-2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n -= 1
return n3
result = fab(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)
例2:汉诺塔def hanoi(n,x,y,z):#x,y,z代表3根针
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')
|