qq_43687485
forestelk
2018-11-15 05:53
采纳率: 50%
浏览 394

请大佬们看看为什么错了,谢谢大佬,小白感激不尽,运行的时候感觉i系统都要崩溃了

#include
#include
using namespace std;

void hannoi(int n, char A, char B, char C)
{
if (n == 1)
{
cout << "移动圆圈" << n << "从盘" << A << "到盘" << C << endl;
}
else
{
hannoi(n - 1, A, C, B);
cout << "移动圆圈" << n << "从盘" << A << "到盘" << C << endl;
hannoi(n - 1, B, A, C);
}
}

int main()
{
int n;
cin >> n;

hannoi(n, 'a', 'b', 'c');

system("pause");
return 0;

}

为什么这样就不行啊
#include
#include
using namespace std;

void hannoi(int n, char A, char B, char C)
{
(不讨论n为1的情况
hannoi(n - 1, A, C, B);
cout << "移动圆圈" << n << "从盘" << A << "到盘" << C << endl;
hannoi(n - 1, B, A, C);
}
}

int main()
{
int n;
cin >> n;

hannoi(n, 'a', 'b', 'c');

system("pause");
return 0;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • caozhy
    已采纳

    void hannoi(int n, char A, char B, char C)
    {
    (不讨论n为1的情况
    hannoi(n - 1, A, C, B);
    cout << "移动圆圈" << n << "从盘" << A << "到盘" << C << endl;
    hannoi(n - 1, B, A, C);
    }
    作为递归调用,必须要有终止递归的判断,你这么写,hannoi会无条件地调用hannoi,而内侧的hannoi又会再递归,永远遇不到跳出递归的情况。
    肯定是堆栈溢出了。

    既然你有正确的程序了,你就参考它吧。

    点赞 评论
  • weixin_42207215
    weixin_42207215 2018-11-15 06:36

    建议还是多看看递归程序的终止条件,不然以后还是会遇到这样的问题。
    递归程序终止必须有终止条件,不然,会一直调用。而计算机分配给一个程序的栈空间是有限的,所以,会崩溃。

    点赞 评论
  • Donald0526
    Donald_Washington 2018-11-15 08:37

    你这程序没问题啊,你是不是输入的值太大,汉诺塔问题主要是学会用递归的方法解决问题,递归函数是没问题的,你用个位数测试一下。

    点赞 评论

相关推荐