首页 > 解决方案 > 为什么我得到的斐​​波那契数达到我的数组的大小?

问题描述

我想打印低于 1000 的斐波那契数列。但在我下面的代码中,我不知道为什么要让斐波那契数达到我定义的数组的最大大小?

int main(){
    int dp[22] = {0};

    dp[0] = 0, dp[1] = 1;
    count<<dp[0]<<" "<<dp[1]<<" ";
    for(int i=2; dp[i]<=1000; i++){
        dp[i] = dp[i-1] + dp[i-2];
        cout<<dp[i]<<" ";
    }

    cout<<endl;

    return 0;
}

Expected Output : 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
Actual Output : 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 

标签: c++for-loopfibonacci

解决方案


问题是dp[i]<=1000这一行的测试:

for(int i=2; dp[i]<=1000; i++){

的值是下一个i数组元素的索引,它总是包含零,所以测试总是返回true。我不确定为什么当您越过数组末尾时它不会导致一些内存错误。只是机会,我猜。dp[i]<=1000

也许将for循环重写为while循环会使这一点更清楚:

int i = 2;

while (dp[i] <= 1000) {

    dp[i] = dp[i - 1] + dp[i - 2];

    cout << dp[i] << " ";

    i++;
}

for使用循环使这项工作的一种方法:

#include <iostream>
using namespace std;

int main() {
    int dp[22] = {0};

    dp[0] = 0;
    dp[1] = 1;

    cout << dp[0] << " " << dp[1] << " ";

    for (int i = 2; ; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];

        if (dp[i] <= 1000) {
            cout << dp[i] << " ";
        } else {
            break;
        }
    }

    cout << endl;

    return 0;
}

推荐阅读