用递推法和递归法计算斐波那契(Fibonacci)数列的第n项

斐波那契数列

递推法

编写程序,用递推法计算斐波那契(Fibonacci)数列的第n项。

求解思路:斐波那契(Fibonacci)数列为0,1,1,2,3,5,8,13,……,即:

F(0)=0,F(1)=1,

F(n)=F(n-1)+F(n-2),当n>1时。

用递推法编写的程序为:

#include<stdio.h>
int Fib(int n)
{
    int f0=0,f1=1,f,i;
    if(n==0||n==1)
    {
        return n;
    }
    for(i=2;i<=n;i++)
    {
        f=f0+f1;       //由前两步结果推出当前结果
        f0=f1;         //原前一步当作下一次的前两步
        f1=f;          //当前结果当作下一次的前一步
    }                  //在进行向前传递时,要注意传递的时序
    return f;
}
void main()
{
    int n=7;
    printf("Fib(%d)=%d\n",n,Fib(n));
}

执行结果
在这里插入图片描述

递归法

所谓递归算法就是在函数过程中直接或间接调用自己,还是求斐波那契数列的问题,相应的递归程序为:

#include<stdio.h>
int Fib(int n){
    if(n==0||n==1)
    {
        return n;                          //结束项
    }
    else
    {
        return Fib(n-1)+Fib(n-2);          //递归项
    }
}
void main()
{
    int n=7;
    printf("Fib(%d)=%d\n",n,Fib(n));
}

执行结果
在这里插入图片描述
递归算法简单,但不能无限递归。因此,算法中需要设置递归结束条件。

递归法的时间效率较低,原因是重复计算太多。

例如:计算Fib(5),总计算次数为2Fib(6)-1=15。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值