每次都出乎意料的结果

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