c语言--求第n个斐波那契数列(递归、迭代)

目录

  • 一、概念
  • 二、用迭代求第n个斐波那契数
    • 1.分析
    • 2.完整代码
    • 3.运行结果
    • 4.如果求第50个斐波那契数呢?看看会怎么样。
      • 4.1运行结果:
      • 4.2画图解释
  • 三、用迭代的方式求第n个斐波那契数列
    • 1.分析
    • 2.完整代码
    • 3.运行结果
    • 4.求第50个斐波那契数
      • 4.1运行结果
      • 4.2运行结果的解释
  • 四、总结

一、概念

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda 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*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

二、用迭代求第n个斐波那契数

1.分析

在这里插入图片描述

2.完整代码

#include<stdio.h>
int Fib(int n)
{if (n<=2){return 1;}else{return Fib(n - 1)+Fib(n - 2);}
}
int main()
{int n = 0;scanf("%d", &n);int ret=Fib(n);printf("%d", ret);return 0;
}

3.运行结果

在这里插入图片描述
查数据得:
第五项斐波那契数是:5。

4.如果求第50个斐波那契数呢?看看会怎么样。

运行结果:
在这里插入图片描述
当我们n输⼊为50的时候,需要很⻓时间才能算出结果,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是非常低效的,那是为什么呢?
其实递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计算,而且递归层次越深,冗余计算就会越多。
进行测试:

#include <stdio.h>
int count = 0;
int Fib(int n)
{if(n == 3)count++;//统计第3个斐波那契数被计算的次数if(n<=2)return 1;elsereturn Fib(n-1)+Fib(n-2);
}
int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d\n", ret); printf("\ncount = %d\n", count);return 0;
}

4.1运行结果:

在这里插入图片描述
这里我们看到了,在计算第40个斐波那契数的时候,使用递归方式,第3个斐波那契数就被重复计算了39088169次,这些计算是非常冗余的。所以斐波那契数的计算,使用递归是非常不明智的,我们就得想迭代的方式解决。

4.2画图解释

在这里插入图片描述

三、用迭代的方式求第n个斐波那契数列

1.分析

在这里插入图片描述

2.完整代码

#include<stdio.h>
int Fib(int n)
{
int a = 1, b = 1, c = 1;while (n > 2){a = b;b = c;c = a + b;n--;}return c;
}
int main()
{int n = 0;scanf("%d", &n);int numb = Fib(n);printf("%d", numb);
}

3.运行结果

在这里插入图片描述

4.求第50个斐波那契数

4.1运行结果

在这里插入图片描述
这个结果的出现花费的时间非常快,

4.2运行结果的解释

这个第50个斐波那契数太大了,一个整型放不下,所以是负滴。

四、总结

青蛙跳台阶问题,也是属于求n个斐波那契数列。有时候,递归虽好,但是也会引⼊⼀些问题,所以我们⼀定不要迷恋递归,恰到好处就好。
在这里插入图片描述
欧耶!!!!我学会啦!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450035.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL进阶之锁(表级锁,元数据锁,意向锁)

表级锁 介绍 表级锁&#xff0c;每次操作锁住整张表。锁定粒度大&#xff0c;发生锁冲突的概率最高&#xff0c;并发度最低。应用在MyISAM、 InnoDB、BDB等存储引擎中。 对于表级锁&#xff0c;主要分为以下三类&#xff1a; 表锁 元数据锁&#xff08;meta data lock&…

1元竟能驱动170万次AI推理?面壁智能MiniCPM 2B大模型,部署教程 移动端 安卓 苹果 ios android

在科技日新月异的今天,我们似乎习惯了“更新换代”的节奏。但你有没有想过,那些陪伴我们多年的老手机,也能摇身一变成为AI神器?面壁智能的MiniCPM 2B大模型,就给我们带来了这样的惊喜。 你可能不知道,这个仅有20亿参数的大模型,却拥有“越级打怪”的实力。与业内知名的…

如何搭建私有云盘SeaFile并实现远程访问本地文件资料

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-hsDnDEybLME85dTx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Web自动化测试理论知识

1、自动化测试概述 概念&#xff1a;用工具代替/辅助人工完成完成软件测试活动的过程 特点&#xff1a; 可以对程序的新版本自动执行回归测试 可以执行一些手工测试困难或不可能进行的测试 可以更好地利用资源 测试具有一致性和可重复性 误区&#xff1a; …

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

树莓派与Win11通信【一对一】(四)

树莓派与Win11通信【一对一】&#xff08;四&#xff09; 树莓派与Win11通信【一对一】&#xff08;四&#xff09;的代码优化版&#xff0c; 最近给代码添加了打开摄像头与否的验证&#xff0c;以及文件的保存&#xff0c;定时拍摄 1.Server端 import socket import time …

【数据结构 09】哈希

哈希算法&#xff1a;哈希也叫散列、映射&#xff0c;将任意长度的输入通过散列运算转化为固定长度的输出&#xff0c;该输出就是哈希值&#xff08;散列值&#xff09;。 哈希映射是一种压缩映射&#xff0c;通常情况下&#xff0c;散列值的空间远小于输入值的空间。 哈希运…

Axure 动态面板初使用 - 实现简单的Banner图轮播效果

实现简单的Banner图轮播效果 使用工具版本实现的效果步骤过程 使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure工具&#xff0c;从元件库拖个动态面板到空白页&#xff1b; 2、给面板设置一个常用的banner尺寸&#xff0c;举个栗子&#xff1a;343151(移动端我常用…

Scratch:引领孩子们步入编程世界的魔法石

Scratch&#xff0c;一款由麻省理工学院&#xff08;MIT&#xff09;开发的面向儿童的编程软件&#xff0c;以其独特的交互性和直观性&#xff0c;正逐渐成为孩子们学习编程的首选工具。它不仅降低了编程的门槛&#xff0c;还激发了孩子们对编程的浓厚兴趣&#xff0c;为未来的…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务&#xff0c;方案是使用阿里云的短视频服务&#xff0c;其中也有使用到阿里云的上传SDK&#xff0c;过程中有遇一个上传SDK的内部崩溃&#xff0c;崩溃栈如下&#xff1a; Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Leetcode】目前300题,大部分二刷,总感觉自己是在背答案一样,怎么破?

1&#xff0c;一开始学习的时候&#xff0c;就是刚学完数据结构算法&#xff0c;刚开始做题&#xff0c;说实话&#xff0c;一个easy题目都需要半个小时&#xff0c;甚至好几个小时&#xff0c;非常正常&#xff0c;因为这个阶段你是在学习&#xff0c;不是在做题&#xff0c;要…

Nonterrestrial Networks (NTN) for 5G and Beyond

Overview In this paper, we’ll take a look at the current state of NTNs, some of the new applications being explored, and crucially, the technical challenges that we’ll need to overcome to make it a viable market. Finally, we’ll get an overview of the w…