每日一数——使用函数求Fibonacci数

📙斐波那契数列简介:

  • 斐波那契数列(Fibonacci sequence)
  • 又称 黄金分割 数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
  • 在数学上,斐波那契数列以如下被以递推的方法定义: F (0)=0, F (1)=1, F (n)= F (n - 1)+ F (n - 2)( n ≥ 2, n ∈ N*)
  • 在现代物理、准 晶体结构 、化学等领域,斐波那契数列都有直接的应用。
    在这里插入图片描述

📗斐波那契数列在C语言中的求解:

1.📃常规求解:

  • 根据上图,我们可以简单的理解为:斐波那契数列第一二项为1,后面一项则是前两项的和,依次递推下去。
  • 所以这里我们采用类似分段函数的方式求解。

在这里插入图片描述

#include <stdio.h>
int fib(int n)
{
    int a = 1, b = 1, i = 0;
    int c = 0;
    if (n <= 2)
        return 1;
    else
    {
        for (i = 0; i < n - 2; i++)
        {
            c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
}
int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", fib(n));

    return 0;
}

  • 方法常规,计算量相对较少。

2.函数递归法:

  • 这种方法就结合了数学递推关系。需要学会函数递归思想才能理解(以后函数会详细讲解)。
#include <stdio.h>
int fib(int n)
{
    if (n > 2)
        return  fib(n - 1) + fib(n - 2);
    else
        return 1;
}
int main()
{
    int n;

    scanf("%d", &n);
    printf("%d\n", fib(n));

    return 0;
}


  • 这种方法的弊端也很明显:就是费电脑,如果n的输入值比较大,由于计算量会很大,这种方式1表达不够简单,在做题中容易发生答题超时。

📘青蛙跳问题:

问题概述:

  • 一只青蛙要跳上一定数量的台阶,但其一次只能跳一阶或两阶,求这只青蛙跳上n上台阶有多少中跳法?

问题分析:

  • 当n=1时,青蛙只能有一种跳法;

  • 当n=2时,青蛙可以先跳一阶,在跳一阶;也可以直接跳两阶。共两种跳法;

  • 当n=3时,青蛙可以先跳一阶再跳两阶,也可以先跳两阶在跳一阶,还可以一阶一阶的跳,共三种跳法;
    - 这样理解或许有些麻烦,我们还可以采用更快的理解方式。

  • 当n=3时,我们可以理解为如果青蛙先跳一阶,这后面我们可以理解为n=2时的跳法,若青蛙先跳两阶,后面可以理解为n=1的跳法。

  • 以此类推,当n=m时,跳法总数 = (当n=m-1的跳法总数) + (当n=m-2的跳法总数)。

  • 这样递推就类似上面讲的斐波那契数列了,但不完全一样。

#include <stdio.h>
int like_fib(int n)
{
	if (n == 1)
	{
		return 1;
	}
	else if (n == 2)
	{
		return 2;
	}
	else if (n > 2)
	{
		return f(n - 1) + f(n - 2);//递归
	}

}
int main()
{
	printf("青蛙要跳几个台阶=>");
	int a = 0;
	scanf("%d", &a);
	printf("青蛙会有几种跳法=>");
	printf("%d", like_fib(a));

}

🎉🎉好喽,今日分享到此结束咯!🎉🎉 在这里插入图片描述
——————————— 萌新初上道,大佬多指教🧸

  • 27
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知更鸟呆呆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值