美文网首页
汉诺塔理解递归

汉诺塔理解递归

作者: Breezes | 来源:发表于2021-03-21 18:25 被阅读0次

对递归的理解一直是展开的方式,拿参数带进去试,但是这种方法实在令我苦恼不已,看知乎上的回答恍然大悟:


image.png
image.png

汉诺塔可以很好的帮助理解递归
举个栗子:

1.三个柱子分别为A、B、C;
2.有3个圆盘,分别编号:1、2、3(从下往上编号);
3.移动这3个盘子从A搬到C

3层汉诺塔.gif

步骤⬇️:

  1. from A move 3号盘子 to C //开始移动除最后一个外其他盘到缓冲区B
  2. from A move 2号盘子 to B
  3. from C move 3号盘子 to B //除最后一个外其他盘子已经全部放入缓冲区B
  4. from A move 1号盘子 to C //最后一个盘移动到C,开始移动其他的盘子从缓冲区B放入到C
  5. from B move 3号盘子 to A
  6. from B move 2号盘子 to C
  7. from A move 3号盘子 to C //除最后一个其他盘子已全部从缓冲区移动到C

从上面的过程+注释可以看出除了最后一个盘子,在最后一个盘子未移动到C之前,其他的盘子都是在从A移动到缓冲区的过程,直到最后一个盘子放入到C,其他的盘子才开始从缓冲区移动到C

因此以上的步骤可以简单概括成

1.把n-1号盘子移动到缓冲区
2.把1号盘子移动到C
3把缓冲区的盘子移动到C

v2-77f7888545bc94292253725fd5033bad_hd.gif

python实现⬇️:

def move(n, f, buffter, t):
    if n == 1:
        print('Move', n, 'from', f, 'to', t)
    else:
        move(n - 1, f, t, buffter)
        move(1, f, buffter, t)
        move(n - 1, buffter, f, t)

对于递归不应该使用展开的方式去理解,没必要从1开始逐个验证,只要证明了“基础条件”,再证明了递推条件,规律会帮我们搞定一切

相关文章

  • 理解汉诺塔递归

    三个盘子的汉诺塔你总会吧: 然后你移完发现左边柱子下面又蹦出来一个盘子 好吧, 那就把中间的柱子看成目标柱 然后把...

  • 汉诺塔理解递归

    对递归的理解一直是展开的方式,拿参数带进去试,但是这种方法实在令我苦恼不已,看知乎上的回答恍然大悟: 汉诺塔可以很...

  • 汉诺塔递归

    学习汉诺塔递归算法

  • python例子

    利用递归函数移动汉诺塔

  • 2019-11-28汉诺塔算法-递归实现

    使用递归的方式实现汉诺塔

  • Tower of Hanoi的理解

    汉诺塔之前一直是知道过程,理解不了代码。直到今天在知乎上看到一种理解方式,一下子就懂了。如何理解汉诺塔的递归? -...

  • 数据结构与算法-递归分治-汉诺塔思想

    折半查找算法的递归实现 思想:减少查找序列的长度,分而治之地进行关键字的查找 汉诺塔问题 汉诺塔是我们递归思想,分...

  • 数据结构算法之递归和栈结构

    递归 程序调用自身的编程技巧称为递归简单案例:n的阶乘 汉诺塔 汉诺塔问题描述:3个柱为a、b、c,圆盘最初在a柱...

  • Python3 趣味系列题4 ------非递归解决

      人们通常利用递归的方法求解汉诺塔问题。递归程序的实现比较简单,但是难于理解。下面给出python3的递归程序:...

  • 汉诺塔

    利用递归函数移动汉诺塔: 打印移动过程

网友评论

      本文标题:汉诺塔理解递归

      本文链接:https://www.haomeiwen.com/subject/ziovcltx.html