C++中的Fibonacci系列不能超过47个数字

mat*_*apb 0 c++ fibonacci

我设计了这个程序,可以打印斐波那契系列(series[i] = series[i-1] + series[i-2])但我不能得到超过47个数字,因为第48个它们变成负数和奇数(我认为这发生在列表超出范围或项目为空时):

#include <iostream>
#include <vector>

using namespace std;

int main ()
{
    int length;
    string again = "";
    do {
        cout << "Enter the length you want in your sequence: ";
        cin >> length;
        vector<int> series(length);
        for (int n=0; n<=1; n++) series[n] = n;
        for (int number=2; number<=length; number++) {
            series[number] = series[number-1] + series[number-2];
        }
        for (int i=0; i<length; i++) cout << series[i] << " ";
        cout << endl << "Do it again ? <y/n> ";
        cin >> again;
        cout << endl;
    } while (again == "y");
}
Run Code Online (Sandbox Code Playgroud)

编辑:

"改进"代码:

#include <iostream>
#include <vector>
#include <string>

std::vector<int> fibonacci (int length)
{
    std::vector<int> series(length);
    series[0] = 0;
    series[1] = 1;
    for (int num=2; num<length; num++) {
        series[num] = series[num-1] + series[num-2];
    }
    return series;
}

int main ()
{
    std::string again;
    do {
        std::cout << "Enter how many numbers you want in your series: ";
        int length;
        std::cin >> length;
        std::vector<int> series(length);
        series = fibonacci(length);
        for (int n=0; n<length; n++) std::cout << series[n] << " ";
        std::cout << "\nDo it again <y/n> ? ";
        std::cin >> again;
        std::cout << std::endl;
    } while (again == "y");
}
Run Code Online (Sandbox Code Playgroud)

Blu*_*Ice 7

当你达到第47个值时,数字超出int范围.最大值int2,147,483,647,第46个数字正好在下面1,836,311,903.第47个数字超过了最大值2,971,215,073.

另外,正如LeonardBlunderbuss所提到的,你已经超出了for你拥有的循环向量的范围.向量开始于0,因此将调用number<=length;range+1元素.范围只能达到length-1.