在数学中,斐波那契数是以下整数序列中的数字,称为斐波纳契数列,其特征在于前两个数之后的每个数都是前两个数之和。
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个术语?
答案 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