如何在c ++中生成10个Fibonacci系列项?

时间:2018-01-28 16:39:09

标签: c++

在数学中,斐波那契数是以下整数序列中的数字,称为斐波纳契数列,其特征在于前两个数之后的每个数都是前两个数之和。

1,1,2,3,5,8,13,21,34,55,...... 我真的尝试过,但我无法在心理上把它变成代码,这是我的:

#include <iostream>

using namespace std;
int main () {
cout <<"Fibonacci series " << endl;

int arr[10];
for (int i = 0; i < 10; i++){
         arr[i] = i;

         arr[i+2] = arr[i]+arr[i+1];

}
for (int i = 0; i < 10; i++)
    cout << arr[i] << endl;



return 0;
}

我应该怎样做才能代表Fibonacci系列的10个术语?

1 个答案:

答案 0 :(得分:1)

答案很简单。可以通过代码中的一些调整来完成

您的第一个for循环将产生越界错误,如第9次迭代(i = 8),您将访问不存在的arr [10]。

以下是更正后的代码:

#include <iostream>

using namespace std;
int main () {
    cout <<"Fibonacci series " << endl;

    int arr[10];
    arr[0] = arr [1] = 1;
    for (int i = 2; i < 10; i++){
        arr[i] = arr[i-1]+arr[i-2];

    }
    for (int i = 0; i < 10; i++)
        cout << arr[i] << endl;



    return 0;
}

在上面的代码中,您可以将10替换为任何其他数字,它将在系列中产生许多数字。替换10 in array声明,以及for循环结束条件。

如果您只需要打印系列,也可以在没有数组且只有一个循环的情况下执行此操作:

#include <iostream>

using namespace std;
int main () {
    cout <<"Fibonacci series " << endl;
    int a = 1, b = 1;
    cout << a << endl << b << endl;
    for (int i = 0; i < 10; i++)
    {
        ((a<b) ? a : b ) = a + b;
        cout << ((a>b) ? a : b ) << endl;
    }



    return 0;
}

for循环中,选择两个数中最小的一个,并分配两个no的总和。然后打印出两个中最大的一个,这是刚修改过的数字。

例如:

输出初始值:1 1

1: i = 2; a = 1; b = 1;两个中最小的一个(这里b为a < b失败)被赋予两个值的总和,这两个值是系列中的下一个数字,b = 2.现在数字越大(这个数字被修改为{ {1}})已打印。输出:1 1 2

2: i = 3; a = 1; b = 2;较小的(现在为a)被赋予总和(3),a = 3;现在打印较大的数字(这是刚修改为a+b > b的数字)。输出:1 1 2 3

等等

编辑:对于以a+b > b作为用户输入的评论,最好使用std :: vector或指针。真的推荐前者,因为它更少混乱,更不容易在脚下射击自己&#34;。

代码如下:

n

并指点:

#include <iostream>
#include <vector>

using namespace std;
int main () {
    cout <<"Fibonacci series " << endl;

    vector<int> arr;
    int n = 0;
    cout << "Enter no to print \n";
    cin >> n;
    arr.push_back(1);
    arr.push_back(1);
    for (int i = 2; i < n; i++){
        arr.push_back(arr[i-1]+arr[i-2]);

    }
    for (int i = 0; i < n; i++)
        cout << arr[i] << endl;



    return 0;
}

编辑感谢@Xam