鱼C论坛

 找回密码
 立即注册
查看: 803|回复: 18

[已解决]hanoi塔代码详解

[复制链接]
发表于 2020-6-2 10:17:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 滑稽蛋 于 2020-6-2 10:54 编辑

def hanoi(n,x,y,z):
    if n == 1:
        print(x,'-->',z)
    else:
        hanoi(n-1,x,z,y)
        print(x,'-->',z)
        hanoi(n-1,y,x,z)


n = int(input('请输入你的数字:'))
hanoi(n,'x','y','z')



在这里我想不明白,他的判断是怎么结束的和n-1代表的是什么,不会是每次一定后剩下的盘子数吧


然后问个小问题我想应该是这样子的,就是在函数if判断语句里面的x,y,z换位置他只是一个名字换掉,我再外面给他赋予的值的位置是不会改变的,就好比这里的x,z,y赋值后就是x,y,z,然后我需要打印的就是不变的
最佳答案
2020-6-2 10:36:03
滑稽蛋 发表于 2020-6-2 10:32
意思就是说,比如我输入的是2,判断2不等于1,进入else,也就是x-->y,2-1=1.第二次循环1 等于1,也就是x ...

这个 不是 循环 是递归,你有点理解错了

假如你输入的是2,判断2不等于1 执行 else 代码块 进入递归

递归中 2-1 =1  则 n = 1 if 再次判断  正好符合条件  进入 if 代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 10:21:18 | 显示全部楼层
n - 1 是需要移动的盘子数量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:22:23 | 显示全部楼层
Twilight6 发表于 2020-6-2 10:21
n - 1 是需要移动的盘子数量

这样子的啊,那他是怎么判断结束的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:24:12 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:22
这样子的啊,那他是怎么判断结束的呢

递归到最后 n == 1  就到了 if 代码块 执行,if 语句的代码块里没有 递归了,所以此时结束,开始依次返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:26:42 | 显示全部楼层
谈如何简单懒汉式理解汉诺塔
https://fishc.com.cn/thread-126371-1-1.html
(出处: 鱼C论坛)
你也可以去看看大佬写的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:32:53 | 显示全部楼层
Twilight6 发表于 2020-6-2 10:24
递归到最后 n == 1  就到了 if 代码块 执行,if 语句的代码块里没有 递归了,所以此时结束,开始依次返回

意思就是说,比如我输入的是2,判断2不等于1,进入else,也就是x-->y,2-1=1.第二次循环1 等于1,也就是x --> z  ,再1 - 1 = 0 ,第三次循环 0不等于1,也就是对应的y-->z,然后输出每次判断的结果是这样吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:36:03 | 显示全部楼层    本楼为最佳答案   
滑稽蛋 发表于 2020-6-2 10:32
意思就是说,比如我输入的是2,判断2不等于1,进入else,也就是x-->y,2-1=1.第二次循环1 等于1,也就是x ...

这个 不是 循环 是递归,你有点理解错了

假如你输入的是2,判断2不等于1 执行 else 代码块 进入递归

递归中 2-1 =1  则 n = 1 if 再次判断  正好符合条件  进入 if 代码块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:46:25 | 显示全部楼层
Twilight6 发表于 2020-6-2 10:36
这个 不是 循环 是递归,你有点理解错了

假如你输入的是2,判断2不等于1 执行 else 代码块 进入递归
...

我的错,我的错,我搞混了,他是调用自己对哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:47:46 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:46
我的错,我的错,我搞混了,他是调用自己对哦

哈哈  对哦,汉诺塔确实比较难 我当时消化了好久
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:51:54 | 显示全部楼层
Twilight6 发表于 2020-6-2 10:47
哈哈  对哦,汉诺塔确实比较难 我当时消化了好久

那么问题又来了,这里的xyz为什么要换位置呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:54:26 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:51
那么问题又来了,这里的xyz为什么要换位置呢

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

使用道具 举报

发表于 2020-6-2 10:54:59 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:51
那么问题又来了,这里的xyz为什么要换位置呢

https://fishc.com.cn/thread-126371-1-1.html

看这个去理解为什么吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:55:27 | 显示全部楼层

哈哈,是和我上面说的差不多的嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 10:56:16 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:55
哈哈,是和我上面说的差不多的嘛

差不多吧 换位置来模拟移动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 10:58:35 | 显示全部楼层
Twilight6 发表于 2020-6-2 10:56
差不多吧 换位置来模拟移动

就是因为你不能重新输入,所以要改变函数参数的位置来模拟移动是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 11:00:07 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 10:58
就是因为你不能重新输入,所以要改变函数参数的位置来模拟移动是吧

嗯  我们只需要输入一次,后面的让程序来走出最优的移动方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 11:01:49 | 显示全部楼层
Twilight6 发表于 2020-6-2 11:00
嗯  我们只需要输入一次,后面的让程序来走出最优的移动方法

小甲鱼留的题目我感觉有点为难我们新手了,这个上面的第一天这些要怎么输出,就有点懵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-2 11:02:45 | 显示全部楼层
滑稽蛋 发表于 2020-6-2 11:01
小甲鱼留的题目我感觉有点为难我们新手了,这个上面的第一天这些要怎么输出,就有点懵

哈哈哈哈   没事难为我们也是种锻炼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-2 15:00:57 | 显示全部楼层
Twilight6 发表于 2020-6-2 11:02
哈哈哈哈   没事难为我们也是种锻炼

我觉得这个题目,没有一点小提示我是做不出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 22:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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