c++ - 每次都出乎意料的结果
问题描述
我一直在尝试以线性时间实现斐波那契数列。每次运行程序时,我都会得到奇怪的结果。我是 C++ 的新手。
int fib1(int n) {
int arr[n];
arr[0] = 0;
arr[1] = 1;
for (int i = 2; i < n; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
return arr[n];
}
int main() {
int x = fib1(3);
cout << x << endl;
return 0;
}
预期结果是:2
我得到的结果是:4199748
我哪里搞砸了?
解决方案
如果arr
是长度n
,则它没有带索引的元素,n
因此您在return arr[n]
. 这会导致未定义的行为,并且任何事情都可能发生。您可能想要一个长度n+1
和迭代最多为i <= n
.
此外,在标准 C++ 中,数组大小必须在编译时知道。arr[n]
因此,仅允许使用可变长度数组,因为您的编译器对它有特殊支持。改为使用std::vector
。