汉诺塔游戏递归算法,几行代码怎么这么难理解
def hanoi(n,x,y,z):# n代表层数,x y z代表左中右三根针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")
#else里面参数z跟y换位置怎么理解为将盘子从x移动到y了,输出一共只有一条 x--->z
大概意思我明白,就是最大的那个留着,剩下的放在中间,然后最大的放最右边,中间的全挪最右边,层数越多拆的越细,但是这段好难理解{:10_277:} 所以你的问题是.... 青出于蓝 发表于 2020-6-18 17:52
所以你的问题是....
怎么理解~~实在看不明白了 玩过汉娜塔的话应该就好理解了,这是有规律的,每次就是这两个步骤在来回执行,直到最后只有一个最小的,移过去就行了~ 递归,一般可以理解为,解决一个问题的子问题。
一个N层的汉诺塔,你只要知道N-1层是怎么处理的,然后挪动最后一个
一个N-1层的汉诺塔,同样,你只要知道N-2层的处理方法。
...
一直到一层是怎么处理的。这个是思路。
至于问函数怎么运输的,遇到函数就往函数走,知道函数出结果,建议画出来,注意层次结构
汉诺塔递归 建议可以用 有 调试功能的 编译器 , 每步运算结果一目了然~~~
比如我爱的 PyCharm:{:10_297:}
或者看看以下文章:
谈如何简单懒汉式理解汉诺塔
https://fishc.com.cn/thread-126371-1-1.html
(出处: 鱼C论坛)
小甲鱼中关于汉诺塔的详细步骤讲解
https://fishc.com.cn/thread-65362-1-1.html
(出处: 鱼C论坛)
Twilight6 发表于 2020-6-18 18:42
汉诺塔递归 建议可以用 有 调试功能的 编译器 , 每步运算结果一目了然~~~
比如我爱的 PyCharm:{:1 ...
哈哈,老师不让用,就坚持用IDLE,我学习一下,今天这里卡一天了,快秃了 Aber 发表于 2020-6-18 18:58
哈哈,老师不让用,就坚持用IDLE,我学习一下,今天这里卡一天了,快秃了
我知道老师为什么不让用,因为变量什么的主动联想让你不用太记熟单词都会提示你哈哈,按下一个括号自动补另一个,引号,什么的也是 Twilight6 发表于 2020-6-18 18:59
我知道老师为什么不让用,因为变量什么的主动联想让你不用太记熟单词都会提示你哈哈,按下一个括号自动补 ...
谢啦,发的那两个帖子代码运行过程明白了,现在我有一点不太明白的就是这样的
defhanoi(n,x,y,z) :# 这里都是形参,我能理解
hanoi(n-1,x,z,y) # 这里是实参了吧,但是(x,y,z)三个形参换成(x,z,y)意思我明白,就是把x借助z中转到y。但是,,,就是编程语言里怎么理解这个,x的位置没换过,没定义过实参吧?他怎么就从x移动到y了,简单来说就是怎么理解这个参数位置转换,以后在实际中遇到类似问题怎么能举一反三{:10_277:}@Twilight6 Aber 发表于 2020-6-19 11:43
谢啦,发的那两个帖子代码运行过程明白了,现在我有一点不太明白的就是这样的
defhanoi(n,x,y,z) :#...
哈哈哈,我也不懂怎么举一反三,主要了解这个思路吧
说实话我自己都不怎么记得之前的汉诺塔那课自己是怎么作的了{:10_245:} Twilight6 发表于 2020-6-19 12:01
哈哈哈,我也不懂怎么举一反三,主要了解这个思路吧
说实话我自己都不怎么记得之前的汉诺塔那课自己 ...
哈哈哈,看来还得再过段时间说不定自己就通透了,课后作业也卡着呢,得理解几天了{:10_277:}
页:
[1]