首页 > 解决方案 > 每次都出乎意料的结果

问题描述

我一直在尝试以线性时间实现斐波那契数列。每次运行程序时,我都会得到奇怪的结果。我是 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

我哪里搞砸了?

标签: c++fibonacci

解决方案


如果arr是长度n,则它没有带索引的元素,n因此您在return arr[n]. 这会导致未定义的行为,并且任何事情都可能发生。您可能想要一个长度n+1和迭代最多为i <= n.

此外,在标准 C++ 中,数组大小必须在编译时知道。arr[n]因此,仅允许使用可变长度数组,因为您的编译器对它有特殊支持。改为使用std::vector


推荐阅读