每次出乎意料的结果

时间:2019-08-24 01:44:23

标签: c++ fibonacci

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

我在哪里弄糟?

1 个答案:

答案 0 :(得分:8)

如果arr的长度为n,则它没有索引为n的元素,因此您正在访问return arr[n]中的数组越界。这将导致不确定的行为,并且任何事情都可能发生。您可能想要一个长度为n+1且迭代到i <= n的数组。

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