何为斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,其斐波那契数列数列从第3项开始,每一项都等于前两项之和。


文章目录

  • 何为斐波那契数列
  • 概况
  • 一、递归实现函数
    • 原理 :
  • 二、交换位置方法
    • 原理:
  • 当然你也可以这样写
  • 数列方式
  • 总结

概况

既然明确斐波那契数列确定基本算法 如果你要求第n个斐波那契数列**n=n-1+n-2**


提示:以下是本篇文章正文内容,下面案例可供参考

一、递归实现函数

int Fib(int n) {if (n>=2){return Fib(n - 1) + Fib(n - 2);}else{return 1;}}

原理 :

每次递归传入的值都是n-1和n+2的值,直到n>=2
为什么说 n>=2要跳出循环,因为2的前面只有1,会最终导致程序少多加负数,所以要跳出来,2过了就是返回1即可


如果你觉得这样就行了得话,
你是没有见过如果使用这个递归算法
那将计算起来有多么的消耗计算速度 例如你要求第100斐波那契数 套入公式n=(n-1)+(n-2) 那你得先求出第99,和第98
而第99个又需要第98和第97个
而求第98个又需要第97和第96的
如果一直往下... ...
那么越是低位你数字你会发现计算重复次数越来越多 如图计算一个3的重复计算次数。。emmm计算100的时候我的电脑开飞机一般,所以不演示了我就计算第30个斐波那契数列里的3被重复计算的次数

if (n==3){count++;}if (n>=2){return Fib(n - 1) + Fib(n - 2);}else{return count;}

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200823215921413.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FsaWNlc2E=,size_16,color_FFFFFF,t_70#pic_center)
所以这种方法不可取

二、交换位置方法

代码如下

int Fib(int n) {int a = 1;int b = 1;int c = 1;while (n>2){c = a + b;a = b;b = c;n--;   printf("%d\n", c);}return c;
}

原理:

在斐波那契实列里
1,1 ,2,3,5,8,13,21,。。。。。
先用a存1,b存1,a+b的结果2存给c
然后讲a的值给b,c(结果值)给b,
然后进入下一轮的时候
先用a存1,b存2,a+b的结果3存给c
然后再讲a的值给b,c(结果值)给b,
一步一步…
这的时候这个时候的数字被重复计算的次数就不存在了

当然你也可以这样写

return (x > 0 ? f(n - 1) + f(n - 2) : 1);

数列方式

int a = 0, b = 1, c = 0, n = 0, s = 50, arr[50];arr[0] = 1;while (s--){c = a + b;a = b;b = c;arr[n] = c;n++;}int i = 1, j = 4;int sz = sizeof(arr) / 4 - 1;while (sz--){j--;if (j == 0){j = 4;printf("\n");}printf("%d ", arr[i]);i++;}

总结

当然万变不离其宗,斐波那契数的算法依旧是 n=n-1+n-2

C 语言实现斐波那契数列,解决递归实现缺陷(算法)相关推荐

  1. 【C语言】斐波那契数列【递归与迭代】

    一.背景介绍 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子 ...

  2. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

  3. C语言 计算斐波那契数列

    C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法. 方法一:循环 使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中 ...

  4. c语言输出斐波那契程序,C语言打印斐波那契数列

    C语言打印斐波那契数列,具体的个数由用户输入. 我们知道斐波那契数列的规律是从第三个数开始,它数值是前2个的合计. 实现的代码如下: #include #include int main() { in ...

  5. 用python语言编斐波那契数列_用python函数写斐波那契数列

    斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上, ...

  6. 斐波那契数列(递归+源码+注释)

    斐波那契数列(递归+源码+注释) 公元 1202 年,意大利数学家莱昂纳多·斐波那契提出了具备以下特征的数列: 前两个数的值分别为 0 .1 或者 1.1: 从第 3 个数字开始,它的值是前两个数字的 ...

  7. 斐波那契数列python递归 0、1、1、2、3_python: 递归和递推方法求斐波那契数列

    1.  斐波那契数列 序号 0 1 2 3 4 5 6... 数列 0 1 1 2 3 5 8... 2.  三种程序 import time time1 = time.clock() #斐波那契数列 ...

  8. (兔子繁殖问题)斐波那契数列:递归非递归解法

    题目 假设一对幼年兔子需要一个月长成成年兔子,一对成年兔子一个月后每个月都可以繁衍出一对新的幼年兔子.不考虑死亡的情况,问第 N 个月时共有多少对兔子? 这是一个典型的斐波那契数列问题,即 第一个月有 ...

  9. Python输出斐波那契数列【递归、迭代】

    Python输出斐波那契数列[递归.迭代] 首先 斐波那契数列的定义是什么? 斐波那契数列指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波那契数列以如下被以递推的方 ...

  10. 裴波那契数列的递归和动态规划算法

    裴波那契数列的递归和动态规划算法 一.    概论 通过对裴波那契数列的例子,分析了递归和动态规划算法的本质.并且说明了两种算法的区别. 裴波那契数列:800年前,意大利的数学家斐波纳契出版了惊世之作 ...

最新文章

  1. blog摘录--测试感触
  2. 【快乐水题】997. 找到小镇的法官
  3. Where is ABAP Netweaver HTTP 304 not modified set
  4. 《深入理解计算机系统》第七章 链接
  5. CSS如何实现”右部宽度固定,左部自适应“的布局
  6. oracle明文传输http,oracle密码在网络传输中的安全问题
  7. python百度ai文字识别、代码分析_python利用百度AI实现文字识别功能
  8. mysqld或mysqld_safe启动时必须放在第一位的参数(first argument)
  9. vb 6 MDI窗体图片自适应源码
  10. Oracle的三种高可用集群方案
  11. IDEA集成Git使用教程
  12. HA模式下的java api访问要点
  13. 千兆网络PHY芯片 RTL8211E的实践应用
  14. 【百度echarts】实现圆环进度条-代码示例
  15. 通过金矿模型介绍动态规划(转载)
  16. opengl 雷霆战机 2d
  17. 最新影视双端app对接苹果cms+详细安装教程
  18. 移植python到小米路由器记录。
  19. 【源码】Set集合源码剖析
  20. iframe相关,iframe样式

热门文章

  1. verilog中数组的定义_verilog数组定义及其初始化
  2. php支付宝接口md5签名,支付宝接口url生成,MD5验证
  3. 证券资产管理公司从业人员信息数据
  4. 回溯专题——leetcode47. Permutations II medium(有重复数字的全排列)
  5. WinXPSP2禁用Xbm的原因及解决办法(转)
  6. Linux系统中杀死僵尸进程的方法
  7. 时间序列绘制ACF与PACF图像
  8. 关于 Javascript 算法
  9. python 命名字典_python字典命名
  10. testlink根据每版本的测试者的报告无法正常显示可能问题