鱼C论坛

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

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

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

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

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

x
# 将大小不同的盘子从X位置移动到Z位置,要求小盘子必须在大盘子上面
# 每次只能移动一个盘子
# 将n-1个盘子看做一个整体:[n-1]:X-->Y, n:X-->Z, [n-1]:Y-->Z
def hanoi(n,x,y,z):
    global count
    if n == 1:
        print('第%d步:从%s到%s'% (count,x,z))
        count += 1
    else:
        hanoi(n-1,x,z,y) # 将n-1个盘子由X移动到Y上
        print('第%d步:从%s到%s'%(count,x,z)) # 将最底下的盘子由X移动到Z上。
        count += 1
        hanoi(n-1,y,x,z)# 将Y上的n-1个盘子由Y移动到Z上
        
count = 1
n = int(input('输入盘子的个数:'))
hanoi(n,'X','Y','Z')

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

使用道具 举报

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

使用道具 举报

发表于 2020-4-13 08:28:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

hanio(2,x,y,z)  --->    hanoi(1,x,z,y) 
                    print('line11:x-z') 
                        hanoi(1,y,x,z)
                    
            展开--->    print('line7:x-y')
                    print('line11:x-z')
                        print('line7:y-z')
                
hanio(3,x,y,z)  --->    hanoi(2,x,z,y) 
                    print('line11:x-z') 
                        hanoi(2,y,x,z) 
                    
            展开--->        hanoi(1,x,z,y) 
                        print('line11:x-z') 
                            hanoi(1,x,y,z)
                    print('line11:x-y')
                            hanoi(1,x,z,y) 
                        print('line11:x-z') 
                            hanoi(1,x,y,z)
                    
          再展开--->        print('line7:x-z')
                        print('line11:x-y')
                            print('line7:z-y')
                    print('line11:x-z')
                            print('line7:y-x')
                        print('line11:y-z')
                            print('line7:x-z')

'''
~~~~~~~~~~~~~~~~~~
做了一个展开,终于看清怎么回事了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

嗯嗯,对的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 10:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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