每次都出乎意料的结果

New*_*der 0 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;
}
Run Code Online (Sandbox Code Playgroud)

预期的结果是:2

我得到的结果是:4199748

我在哪里弄糟?

wal*_*nut 8

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

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