snowday 发表于 2020-12-16 21:36:33

汉诺塔

画红色横向的地方:当n=3时,第一次执行这条语句时,x与z的值是什么?
我的困惑是上面有一个递归语句,是这个递归语句执行完再执行画红色的语句吗?x,z从hanoi(2,'X',‘Z’,‘Y’)还是hanoi(1,'X',‘Y’,‘Z’)中得到

philly_fei 发表于 2020-12-17 01:45:04

其实问这个问题实际上是没有把汉诺塔的原理吃透 说白了就是受了自己的思路限制
递归说白了是把一个很复杂的东西拆分成同样的步骤一直执行由变量来控制结束
现在你还没把汉诺塔的移动拆分成简单的逻辑 也就没法理解这个程序了
我先给你看个网上的 至少小甲鱼是这么讲的
       实现这个算法可以简单分为三个步骤:
    (1)   把n-1个盘子由A 移到 B;
    (2)   把第n个盘子由 A移到 C;
    (3)   把n-1个盘子由B 移到 C;
这是网上的算法 我先说一句 完全狗屁不通
比如我们说3个盘子 它的第一步就是把3-1=2个盘子移动到B   你觉得对吗?你首先移动的是最小的吧 然后中间那个盘子就不可能移动到B 肯定要移动到C去才行 这才对
所以说基础逻辑就是错的    又怎么能把程序写出来呢? 我给你理下逻辑
比如3个盘子 第一步是第一个盘子到B 第二个盘子到C第一个盘子到C   第三个盘子到B第一个盘子到A 第二个盘子到B 第一个盘子到B
然后你把第一个盘子写成3-2第二个盘子写成3-1
再推下4个盘子 5个盘子 就会了
页: [1]
查看完整版本: 汉诺塔