“河内之塔”的递归并不像看起来那么简单

时间:2014-10-26 22:02:01

标签: recursion

我被要求实施“河内之塔”的递归,我的思想符合这个逻辑:

  1. 将1个磁盘从开始移动到缓冲区
  2. 将其余部分从开始移至目标
  3. 将1个磁盘从缓冲区移至目标
  4. 除了“Towers_of_hanoi(3,start,goal)”

    之外,每个测试都通过了

    原来正确的实施是:

    1. 将n - 1个磁盘从开始移动到缓冲区
    2. 从开始向目标移动1
    3. 将n - 1磁盘从缓冲区移动到目标
    4. 我已经学会了将递归视为一种解决问题的方法,就简单问题而言,在我看来,这两种实现都是这样做的。我的思维与正确的分解方法有什么根本的缺陷?

1 个答案:

答案 0 :(得分:1)

关于河内之塔的事情是,你只能有3个堆栈,你不能把较大的磁盘放在较小的磁盘上,所以你需要确保你用作'缓冲区'的堆栈在进行递归调用之前,不包含任何较小的磁盘。在您的情况下,您将最小的磁盘移动到缓冲区,然后尝试递归以移动堆栈的其余部分,但由于缓冲区不可用,这将失败。