鱼C论坛

 找回密码
 立即注册
查看: 1070|回复: 4

[已解决]递归_汉诺塔,有点儿混乱。

[复制链接]
发表于 2020-4-13 00:02:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. # 将大小不同的盘子从X位置移动到Z位置,要求小盘子必须在大盘子上面
  2. # 每次只能移动一个盘子
  3. # 将n-1个盘子看做一个整体:[n-1]:X-->Y, n:X-->Z, [n-1]:Y-->Z
  4. def hanoi(n,x,y,z):
  5.     global count
  6.     if n == 1:
  7.         print('第%d步:从%s到%s'% (count,x,z))
  8.         count += 1
  9.     else:
  10.         hanoi(n-1,x,z,y) # 将n-1个盘子由X移动到Y上
  11.         print('第%d步:从%s到%s'%(count,x,z)) # 将最底下的盘子由X移动到Z上。
  12.         count += 1
  13.         hanoi(n-1,y,x,z)# 将Y上的n-1个盘子由Y移动到Z上
  14.         
  15. count = 1
  16. n = int(input('输入盘子的个数:'))
  17. hanoi(n,'X','Y','Z')
复制代码


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
老师这个递归没搞明白,这里输出的第一个print语句是第7行的吗?
最佳答案
2020-4-13 00:42:44
你好,是第七行,但是不是初始层的,第一次打印应该是递归最后一层打印,也就是递归到n==1的时候,打印第一次,然后逐层返回,并打印
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-13 00:42:44 | 显示全部楼层    本楼为最佳答案   
你好,是第七行,但是不是初始层的,第一次打印应该是递归最后一层打印,也就是递归到n==1的时候,打印第一次,然后逐层返回,并打印
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-13 08:28:35 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 21:42:41 | 显示全部楼层
  1. # 将大小不同的盘子从X位置移动到Z位置,要求小盘子必须在大盘子上面
  2. # 每次只能移动一个盘子
  3. # 将n-1个盘子看做一个整体:[n-1]:X-->Y, n:X-->Z, [n-1]:Y-->Z
  4. def hanoi(n,x,y,z):
  5.     global count
  6.     if n == 1:
  7.         print('line7:\t第%d步:%d号从%s到%s'% (count,n,x,z))
  8.         count += 1
  9.     else:
  10.         hanoi(n-1,x,z,y) # 将n-1个盘子由X移动到Y上
  11.         print('line11:\t第%d步:%d号从%s到%s'%(count,n,x,z)) # 将最底下的盘子由X移动到Z上。
  12.         count += 1
  13.         hanoi(n-1,y,x,z)# 将Y上的n-1个盘子由Y移动到Z上
  14.         
  15. count = 1
  16. n = int(input('输入盘子的个数:'))
  17. print()
  18. print('盘子从小到大:1号到%d号'%n)
  19. print()
  20. hanoi(n,'X','Y','Z')

  21. '''
  22. hanoi(1,x,y,z)  --->print('line7:x-z')

  23. hanio(2,x,y,z)  --->    hanoi(1,x,z,y)
  24.                     print('line11:x-z')
  25.                         hanoi(1,y,x,z)
  26.                     
  27.             展开--->    print('line7:x-y')
  28.                     print('line11:x-z')
  29.                         print('line7:y-z')
  30.                
  31. hanio(3,x,y,z)  --->    hanoi(2,x,z,y)
  32.                     print('line11:x-z')
  33.                         hanoi(2,y,x,z)
  34.                     
  35.             展开--->        hanoi(1,x,z,y)
  36.                         print('line11:x-z')
  37.                             hanoi(1,x,y,z)
  38.                     print('line11:x-y')
  39.                             hanoi(1,x,z,y)
  40.                         print('line11:x-z')
  41.                             hanoi(1,x,y,z)
  42.                     
  43.           再展开--->        print('line7:x-z')
  44.                         print('line11:x-y')
  45.                             print('line7:z-y')
  46.                     print('line11:x-z')
  47.                             print('line7:y-x')
  48.                         print('line11:y-z')
  49.                             print('line7:x-z')

  50. '''
复制代码

~~~~~~~~~~~~~~~~~~
做了一个展开,终于看清怎么回事了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-14 00:50:20 | 显示全部楼层
SmilerLiu 发表于 2020-4-13 14:42
~~~~~~~~~~~~~~~~~~
做了一个展开,终于看清怎么回事了。

嗯嗯,对的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-20 19:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表