gpt4 book ai didi

c++ - 汉诺塔

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:06 29 4
gpt4 key购买 nike

我正在做一本书中的练习,要求我们使用递归方法解决汉诺塔问题。我找到了一个解决方案,但是从完成浏览 Internet 后收集到的信息来看,我的解决方案可能不正确。有谁知道解决问题的更好/不同方法?有没有人有改进的建议。 (顺便说一句,输出是正确的。它只是应该告诉从哪个塔到另一个钉子正在移动,而不是具体是哪个钉子​​)

代码如下:

#include <iostream>
#include <cmath>

using namespace std;

static int counter = 0;

void ToH(int dskToMv, int cLocation, int tmpLocation, int fLocation)
{
if (dskToMv == 0);
else
{
if (dskToMv%2!=0)
{
cout << cLocation << "->" << tmpLocation << endl;
cout << cLocation << "->" << fLocation << endl;
cout << tmpLocation << "->" << fLocation << endl;
ToH(dskToMv-1, cLocation, fLocation, tmpLocation);
}
else if (dskToMv%2==0)
{
counter++;
if (counter%2==0)
cout << fLocation << "->" << cLocation << endl;
else
cout << cLocation << "->" << fLocation << endl;
ToH(dskToMv-1, tmpLocation, cLocation, fLocation);
}
}
}

int main()
{
int x, j;
cout << "Enter number of disks: ";
cin >> x;
j = pow(2.0, x-1)-1;
if (x%2==0)
ToH(j, 1, 2, 3);
else
ToH(j, 1, 3, 2);
return 0;
}

这个方法是否符合递归条件?

最佳答案

回答您的问题:是的,这符合递归条件。任何时候函数调用自身,都是递归。

话虽如此,您的代码可以大幅缩减:

#include <iostream>

using namespace std;

void ToH(int dskToMv, int cLocation, int tmpLocation, int fLocation)
{
if( dskToMv != 0 )
{
ToH( dskToMv-1, cLocation, fLocation, tmpLocation );
cout << cLocation << "->" << fLocation << endl;
ToH( dskToMv-1, tmpLocation, cLocation, fLocation );
}
}

int main()
{
int x;
cout << "Enter number of disks: ";
cin >> x;
ToH(x, 1, 2, 3);
return 0;
}

关于c++ - 汉诺塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739362/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com