我一直在尝试在线性时间内实现斐波那契数列。每次运行程序时,我总是得到奇怪的结果。我是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
我在哪里弄糟?
答案 0 :(得分:8)
如果arr
的长度为n
,则它没有索引为n
的元素,因此您正在访问return arr[n]
中的数组越界。这将导致不确定的行为,并且任何事情都可能发生。您可能想要一个长度为n+1
且迭代到i <= n
的数组。
此外,在标准C ++中,必须在编译时知道数组大小。因此,只允许使用变长数组arr[n]
,因为您的编译器对此有特殊的支持。请改用std::vector
。