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