首页 > 解决方案 > 如何理解程序需要哪个递归函数

问题描述

我正在测试一些与递归函数相关的代码。我看到了河内塔问题的递归方法,但我很困惑,两个递归函数在 if 条件下使用。到目前为止对程序的理解是首先将 n 设置为零,然后我不知道它如何增加 n 以及它如何知道它应该首先调用哪个递归函数。我对递归函数的理解很薄弱,请帮助我理解给定程序的递归函数的工作原理。

// 河内递归塔

#include <iostream>

using namespace std;

void towersOfHanoi(int n, int x, int y, int z)
{// Move the top n disks from tower x to tower y.
 // Use tower z for intermediate storage.
    if (n > 0) // Base Case
    {
        towersOfHanoi(n - 1, x, z, y);
        cout << "Move top disk from tower " << x << " to top of tower " << y << endl;
        towersOfHanoi(n - 1, z, y, x);

    }

} // Recursive Procedure

void main(void)
{
    cout << "Moves for a three disk problem are" << endl;
    towersOfHanoi(3, 1, 2, 3);
    system("pause");
}

标签: c++recursiontowers-of-hanoi

解决方案


我刚读了你的问题。也许你应该知道这一点。河内塔要遵循的一些规则是 - 在任何给定时间,只能在塔之间移动一个磁盘。只能移除“顶部”磁盘。没有大磁盘可以坐在小磁盘上。所以我们需要将前 n-1 个磁盘从 x 移动到 z,然后我们可以将第 n 个磁盘从 x 移动到 y。最后将顶部的 n-1 个磁盘从 z 移动到 y。


推荐阅读