|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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')
复制代码 |
|