hanoi塔代码详解
本帖最后由 滑稽蛋 于 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,然后我需要打印的就是不变的 n - 1 是需要移动的盘子数量
Twilight6 发表于 2020-6-2 10:21
n - 1 是需要移动的盘子数量
这样子的啊,那他是怎么判断结束的呢 滑稽蛋 发表于 2020-6-2 10:22
这样子的啊,那他是怎么判断结束的呢
递归到最后 n == 1就到了 if 代码块 执行,if 语句的代码块里没有 递归了,所以此时结束,开始依次返回 谈如何简单懒汉式理解汉诺塔
https://fishc.com.cn/thread-126371-1-1.html
(出处: 鱼C论坛)
你也可以去看看大佬写的帖子 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,然后输出每次判断的结果是这样吧 滑稽蛋 发表于 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 代码块 Twilight6 发表于 2020-6-2 10:36
这个 不是 循环 是递归,你有点理解错了
假如你输入的是2,判断2不等于1 执行 else 代码块 进入递归
...
我的错,我的错,我搞混了,他是调用自己对哦 滑稽蛋 发表于 2020-6-2 10:46
我的错,我的错,我搞混了,他是调用自己对哦
哈哈对哦,汉诺塔确实比较难 我当时消化了好久 Twilight6 发表于 2020-6-2 10:47
哈哈对哦,汉诺塔确实比较难 我当时消化了好久
那么问题又来了{:10_277:},这里的xyz为什么要换位置呢 滑稽蛋 发表于 2020-6-2 10:51
那么问题又来了,这里的xyz为什么要换位置呢
{:10_266:} 滑稽蛋 发表于 2020-6-2 10:51
那么问题又来了,这里的xyz为什么要换位置呢
https://fishc.com.cn/thread-126371-1-1.html
看这个去理解为什么吧 Twilight6 发表于 2020-6-2 10:54
哈哈,是和我上面说的差不多的嘛 滑稽蛋 发表于 2020-6-2 10:55
哈哈,是和我上面说的差不多的嘛
差不多吧 换位置来模拟移动 Twilight6 发表于 2020-6-2 10:56
差不多吧 换位置来模拟移动
就是因为你不能重新输入,所以要改变函数参数的位置来模拟移动是吧 滑稽蛋 发表于 2020-6-2 10:58
就是因为你不能重新输入,所以要改变函数参数的位置来模拟移动是吧
嗯我们只需要输入一次,后面的让程序来走出最优的移动方法 Twilight6 发表于 2020-6-2 11:00
嗯我们只需要输入一次,后面的让程序来走出最优的移动方法
小甲鱼留的题目我感觉有点为难我们新手了,这个上面的第一天这些要怎么输出,就有点懵 滑稽蛋 发表于 2020-6-2 11:01
小甲鱼留的题目我感觉有点为难我们新手了,这个上面的第一天这些要怎么输出,就有点懵
哈哈哈哈 没事难为我们也是种锻炼 Twilight6 发表于 2020-6-2 11:02
哈哈哈哈 没事难为我们也是种锻炼
我觉得这个题目,没有一点小提示我是做不出来的
页:
[1]