Aber 发表于 2020-6-18 17:50:24

汉诺塔游戏递归算法,几行代码怎么这么难理解

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:18

所以你的问题是....

Aber 发表于 2020-6-18 17:53:34

青出于蓝 发表于 2020-6-18 17:52
所以你的问题是....

怎么理解~~实在看不明白了

青出于蓝 发表于 2020-6-18 17:56:39

玩过汉娜塔的话应该就好理解了,这是有规律的,每次就是这两个步骤在来回执行,直到最后只有一个最小的,移过去就行了~

Stubborn 发表于 2020-6-18 18:09:44

递归,一般可以理解为,解决一个问题的子问题。

一个N层的汉诺塔,你只要知道N-1层是怎么处理的,然后挪动最后一个

一个N-1层的汉诺塔,同样,你只要知道N-2层的处理方法。

...

一直到一层是怎么处理的。这个是思路。

至于问函数怎么运输的,遇到函数就往函数走,知道函数出结果,建议画出来,注意层次结构

Twilight6 发表于 2020-6-18 18:42:46



汉诺塔递归 建议可以用 有 调试功能的 编译器 , 每步运算结果一目了然~~~

比如我爱的 PyCharm:{:10_297:}

或者看看以下文章:

谈如何简单懒汉式理解汉诺塔
https://fishc.com.cn/thread-126371-1-1.html
(出处: 鱼C论坛)

小甲鱼中关于汉诺塔的详细步骤讲解
https://fishc.com.cn/thread-65362-1-1.html
(出处: 鱼C论坛)


Aber 发表于 2020-6-18 18:58:00

Twilight6 发表于 2020-6-18 18:42
汉诺塔递归 建议可以用 有 调试功能的 编译器 , 每步运算结果一目了然~~~

比如我爱的 PyCharm:{:1 ...

哈哈,老师不让用,就坚持用IDLE,我学习一下,今天这里卡一天了,快秃了

Twilight6 发表于 2020-6-18 18:59:57

Aber 发表于 2020-6-18 18:58
哈哈,老师不让用,就坚持用IDLE,我学习一下,今天这里卡一天了,快秃了

我知道老师为什么不让用,因为变量什么的主动联想让你不用太记熟单词都会提示你哈哈,按下一个括号自动补另一个,引号,什么的也是

Aber 发表于 2020-6-19 11:43:46

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

Twilight6 发表于 2020-6-19 12:01:46

Aber 发表于 2020-6-19 11:43
谢啦,发的那两个帖子代码运行过程明白了,现在我有一点不太明白的就是这样的
defhanoi(n,x,y,z) :#...


哈哈哈,我也不懂怎么举一反三,主要了解这个思路吧

说实话我自己都不怎么记得之前的汉诺塔那课自己是怎么作的了{:10_245:}

Aber 发表于 2020-6-19 12:06:57

Twilight6 发表于 2020-6-19 12:01
哈哈哈,我也不懂怎么举一反三,主要了解这个思路吧

说实话我自己都不怎么记得之前的汉诺塔那课自己 ...

哈哈哈,看来还得再过段时间说不定自己就通透了,课后作业也卡着呢,得理解几天了{:10_277:}
页: [1]
查看完整版本: 汉诺塔游戏递归算法,几行代码怎么这么难理解