求第n个斐波那契数

了解斐波那契数列

斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……
依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。

我们可以用循环的方式来实现一遍

输入一个n告知系统需要输出第几位斐波那契数

这里的while循环是为了输入多个不同n变量,进入循环,中f是为了告知第几位斐波那契数,因为循环中每循环一次n会--所以需要一个f来储存n的值.

然后代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int  n;
    printf("需要输出第几位斐波那契数:");
    while (scanf("%d", &n) != EOF)
    {
        int i = 0, t = 0, fb = 1;
        int f = n;
        n = n - 1;
        while (n)
        {
            i = t;
            t = fb;
            fb = i + t;
            n--;
        }
        printf("第%d位斐波那契数为%d\n", f, fb);
    }
    return 0;
}

最后输入数字循环的结果是:

8818021915cb49949a469565bd17a01b.png

(第一百位斐波那契数执行不出来,是因为一个整形中能储存的最大数是有限的)

当然我们还能用递归来实现

代码如下:

 int Fib(int n)
{
    if (n > 2)
    {
        return Fib(n - 1) + Fib(n - 2);
    }
    else
        return 1;
}
#include<stdio.h>
int main()
{
    int n = 0;
    while (scanf("%d", &n) != EOF)
    {
        int ret = Fib(n);
        printf("第%d位斐波那契数为%d\n", n, ret);
    }
    return 0;
}

总的来说递归是更通俗易懂一点,不过用递归往往会耗费更多的时间,这里我们发现,这种递归写法虽然实现了该功能,但是效率较低,如果我们计算第40个斐波那契数的话,程序会执行很长一段时间。占用太多时间的原因就是编译器进行了大量的重复计算。

2ee80f7d503644188c6d49d3d00a9a40.png

 

所以在我们写代码的过程中,递归递归固然能简化代码步骤,但有时候也不一定很合适,所有我们要选择写代码要选择最优的算法去解决问题。

 

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值