C/C++语言:非递归 和 递归 实现斐波那契数列

题目

在这里插入图片描述
即已知一个斐波那契数列,求任意项的斐波那契数Fn

一、非递归实现

策略

已知 Fn = Fn-1 + Fn-2,则可以先根据F1与F2求出F3,然后再由F2与F3求出F4,依次向上累加求出F5,F6…直到求出Fn。有两种处理方式

  • 处理方式一:
    由 F1 + F2 = F3 先求出F3,然后再更新 F1 和 F2 (F1 = F2,F2 = F3)求出F3,这个值即为F4的值。然后再更新F1和F2(F1 = F2,F2 = F3)求出F3,这个值即为F5的值。。。。。。
    注意:求F3只需循环一次,求F4只需循环二次,求F5只需循环三次。。。求Fn只需循环(n-2)次,如下图:
    在这里插入图片描述
  • 处理方式二:
    定义一个数组value足够的大,从下标为1开始存,value[1] = F1,value[2] = F2,value[3] = F3 等等,直到存储到 value[n-1] = Fn-1,然后求出Fn即可Fn = value[n-1] + value[n-2]。

代码(处理方式一)

//求斐波那契数Fn
int function(int n){
    if(n == 1 || n == 2)//n=1或者n=2
        return 1;
    //n大于等于3
    int F1 = 1, F2 = 1, F3;
    for(int i = 1;i <= n-2; i++){//求Fn要循环n-2次
        F3 = F2 + F1;
        //更新F1和F2
        F1 = F2;
        F2 = F3;
    }
    return F3;//return F2也行
}

代码(处理方式二)

//求斐波那契数Fn
int function_1(int n){
    int value[1000];//足够大
    value[1] = 1;
    value[2] = 1;
    for(int i = 3; i <= n-1; i++)
        value[i] = value[i-1] + value[i-2];
    int Fn = value[n-1] + value [n-2];
    return Fn;
}

二、递归实现

//求斐波那契数Fn
int F(int n){
    if(n == 1 || n == 2)
        return 1;
    else
        return F(n-1) + F(n-2);
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值