【发布时间】:2020-09-21 20:05:36
【问题描述】:
我的代码有什么问题?它不会返回正确的答案,
#include <iostream>
using namespace std;
int ack(int m, int n)
{
if (m == 0) return n + 1;
if(n == 0) return ack(m - 1, 1);
return ack(m - 1, ack(m, n - 1));
}
int main()
{
cout << ack(4, 1) << endl;
return 0;
}
这是输出:
谢谢。
【问题讨论】:
-
StackOverflow - 我猜你的递归太深了。
-
我重写了without recursion。它变得有点慢,但不应该崩溃。在 Godbolt 上运行太慢了,所以你必须在你的机器上尝试一下。确保开启最大优化。
-
不知道。我从未使用过 Code::Blocks。如果您有基于
gcc或clang的编译器,-O3很常见。但是,我不相信优化可以解决这个问题,因为它可能无法处理您在函数中抛出的所有输入。如果值在编译时已知,则可能非常成功,但如果在运行时给出值,则不会。 -
它有效,非常感谢。 :)
-
你可以同时使用记忆和递归。