【发布时间】:2010-12-03 20:58:30
【问题描述】:
我很难理解为什么
#include <iostream>
using namespace std;
int fib(int x) {
if (x == 1) {
return 1;
} else {
return fib(x-1)+fib(x-2);
}
}
int main() {
cout << fib(5) << endl;
}
导致分段错误。一旦 x 降到 1,它最终不应该返回吗?
【问题讨论】:
-
这个算法的时间复杂度是O(2^n)。太糟糕了。例如,f(30) 计算需要大约 10 亿次操作。在您的情况下使用动态编程。
-
@Alexey,我确定 OP 只是想学习。如果性能是一个问题,元编程确实是要走的路。
-
@Alexey Malistov:不,改用迭代方法。
-
@Gumbo:不,用力卢克!
-
我喜欢开玩笑(或不开玩笑)这个算法的时间复杂度是 O(fib(n))。