斐波那契数列(复习)

描述

斐波那契(Fibinacci)数列是这样一个数列:1、1、2、3、5、8、13、21、……, 这个数列前两项是1,从第二项开始,每一项都等于前两项之和。 编程输出Fibinacci数列的前20项。5个数一行。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

输入输出示例

输入输出
示例 1
 
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值