Python递归实现汉诺塔详细解析

# 利用递归函数移动汉诺塔: def move(n, a, buffer, c): if n == 1: print(‘move’, a, ‘–>’, c) else: move(n-1, a, c, buffer) move(1, a, buffer, c) move(n-1, buffer, a, c)

直接进入正题:
逻辑:
1.以第二个柱子(buffer柱)为缓冲区,先将第一个柱子(a柱)上n-1的盘子放到buffer柱
2.把a柱最后一个盘子放到第三个柱子(c柱)
3.以a柱为缓冲区,把buffer柱上面的所有盘子放到c柱上 首先需要知道这个函数的执行过程,一个规则:只有上一个函数执行完毕之后才会执行下一个函数,所以这个函数内部的执行过程也是先把
move(n-1,a,c,buffer)彻底执行完毕之后才会继续向下执行。 以n=3为例 n=3 执行
move(n-1,a,c,buffer) 参数顺序变为
a,c,buffer 此时n=2 n=2 执行
move(n-1,a,c,buffer) 参数顺序变为 a,buffer,c 此时n=1 n=1 输出
a–>c 输出之后函数再次回到n=2的时候(因为在n=2的时候,第一个函数就已经有了终结的因素n=1) n=2 执行
move(1,a,buffer,c) 输出
a–>buffer
(注意:此处当时我也没有立即反应过来怎么就输出a–>buffer了呢!后来发现当n=3的时候执行了第一个函数,n就变成了2此处执行的move(1,a,buffer,c)其实是n=3时的一个子函数,先执行了第一个函数之后,n=2了然后又执行的第二个函数,此时的参数顺序为 a,c,buffer,所以输出 a–>buffer) 因为第二个函数传入的值就是1,所以只执行一次,执行完毕之后执行第三个函数此时n=2,参数顺序为 a,c,buffer n=2 执行
move(n-1, buffer, a, c) 参数顺序变为 c,a,buffer 此时n=1 n=1 输出
c–>buffer 输出之后回到n=3,因为n=2第三个函数执行完毕之后n=1,直接就输出了所以回到n=3,此时参数顺序为 a,buffer,c n=3 执行
move(1,a,buffer,c) 输出
a–>c 执行完第二个函数之后执行第三个函数 n=3 执行
move(n-1, buffer, a, c) 参数顺序变为 buffer,a,c 此时n=2
(注意:当此处执行完毕之后,第三个函数还没有终结因素,所以执行到这里又会有3个函数了,执行顺序还是从第一个开始执行) n=2 执行 第一个函数 参数顺序变为 buffer,c,a 此时 n=1 n=1 输出
buffer–>a 输出完之后再次回到n=3,此时参数顺序为 buffer,a,c 执行 第二个函数 输出
buffer–>c 输出完之后再次回到n=3,此时参数顺序为buffer,a,c 执行 第三个函数 输出
a–>c

结束。

新人,第一篇帖子!!!如有问题,请大家多多讨论

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/zhu_jwei/article/details/78654142
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞