描述
斐波那契(Fibinacci)数列是这样一个数列:1、1、2、3、5、8、13、21、……, 这个数列前两项是1,从第二项开始,每一项都等于前两项之和。 编程输出Fibinacci数列的前20项。5个数一行。
输入输出示例
输入 | 输出 | |
示例 1 | |
#include<stdio.h>
int main()
{
int a[30],sum,n,i;
a[0]=1;a[1]=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
a[i+2]=a[i]+a[i+1];
}
for(i=0;i<n;i++)
{
printf(" %d",a[i]);
}
}
传统简明易懂的斐波那契函数(fib)代码段,适用于位数较少的情况
int f(int n)
{
if(n == 0||n == 1)
{
return 1;
}
else
{
return f(n - 1) + f(n - 2);
}
}
fib函数升级版本(可以计算超大数)
#include<iostream>
using namespace std;
int f(int n)
{
if(n == 0||n == 1)//传统简明易懂的fib函数计算,但是但计算n较大数字时候不适用
{
return 1;
}
else
{
return f(n - 1) + f(n - 2);
}
}
int fib(int n)
{
int MOD = 1000000007;Fau:
//因题而言
//如果求的斐波那契项数过大, 会超过 数据能存储的范围
//通常题目会要求对结果 取模
//取的模数 题目中会告诉你.
//像上述代码中的 1E9+7 就是一个常见模数,总之写成一个较大的数就可以了
if (n < 2)
{
return n;
}
int p = 0, q = 0, r = 1;
for (int i = 2; i <= n; ++i)
{
p = q;
q = r;
r = (p + q) % MOD;
}
return r;
}
int main()
{
int n,r;
cin>>n;
cout << fib(n+1)<<endl;//因为条件不一样所以这里是n+1,
//可以输入5 10 和40 感受一下,当输入40时,就可以感觉到他们计算速度的差别
cout << f(n);
return 0;
}