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

简介: 每日一数——使用函数求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));

}


相关文章
|
JavaScript 搜索推荐 Java
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)(上)
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)
|
6月前
|
移动开发 JavaScript 前端开发
HTML5最新经典俄罗斯方块游戏插件
HTML5最新经典俄罗斯方块游戏插件
|
5月前
|
存储 监控 算法
员工电脑监控场景下 Python 红黑树算法的深度解析
在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
110 7
|
9月前
|
人工智能 前端开发 Serverless
解决方案评测:主动式智能导购AI助手构建
解决方案评测:主动式智能导购AI助手构建
246 3
|
11月前
|
弹性计算 关系型数据库 MySQL
Docker安装MySQL
这篇文章详细介绍了如何使用Docker安装MySQL数据库服务,包括拉取镜像、配置数据卷以及启动容器的步骤。
1050 1
Docker安装MySQL
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
520 3
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
存储 负载均衡 Java
Java中的服务注册与发现原理与实现
Java中的服务注册与发现原理与实现
|
机器学习/深度学习 自然语言处理 机器人
智能客服:提高客户服务的创新技术
智能客服作为提高客户服务质量和效率的创新技术,正在不断改变商业和服务的方式。通过自然语言处理、机器学习和知识图谱等技术,智能客服能够为客户提供更好的服务体验,同时也为企业带来了更大的竞争优势。虽然智能客服在应用中还面临一些挑战,如情感分析和数据隐私,但随着技术的发展和完善,它将在未来持续发挥重要作用。
764 1
|
存储 监控 Linux
MinIO分布式部署
MinIO使用纠删码( Erasure Coding)来做数据的备份和数据恢复,
1340 1
|
缓存 前端开发 Java
DolphinScheduler教程(04)- 项目配置分析
DolphinScheduler教程(04)- 项目配置分析
838 0