每次都出乎意料的结果
Unexpected Result Each Time
我一直在尝试在线性时间内实现斐波那契数列。每次我 运行 程序时,我总是得到奇怪的结果。我是 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
的元素,因此您正在越界访问 [=13= 中的数组].这会导致未定义的行为,任何事情都可能发生。您可能想要一个长度为 n+1
的数组,迭代次数可达 i <= n
.
此外,在标准 C++ 中,数组大小必须在编译时已知。因此,可变长度数组 arr[n]
是允许的,因为你的编译器对它有特殊的支持。请改用 std::vector
。
我一直在尝试在线性时间内实现斐波那契数列。每次我 运行 程序时,我总是得到奇怪的结果。我是 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
的元素,因此您正在越界访问 [=13= 中的数组].这会导致未定义的行为,任何事情都可能发生。您可能想要一个长度为 n+1
的数组,迭代次数可达 i <= n
.
此外,在标准 C++ 中,数组大小必须在编译时已知。因此,可变长度数组 arr[n]
是允许的,因为你的编译器对它有特殊的支持。请改用 std::vector
。