目录

  • 斐波那契数列 引出
  • C语言代码实现——递归
  • C语言代码实现——非递归

斐波那契数列 引出

斐波那契数列的应用十分广泛,这里不再列举。

C语言代码实现——递归

同时也有许多种代码实现方式,这里仅列举C语言的实现方法:

核心思想是使用“递归”。

//C语言:递归实现 Fibonacci数列
//输入n,求 Fibonacci[n]   (在数学中,常常写作Fibonacci(n) )
#include <stdio.h>
#define N 100
long Fibonacci(int n);
int main(){int n;long k;printf("请输入n:");scanf("%d",&n);k=Fibonacci(n);putchar('\n');printf("Fibonacci(%d)=%ld\n",n,k);return 0;}
long Fibonacci(int n){if(n==1||n==2){return 1;} else{return Fibonacci(n-1)+Fibonacci(n-2);}
}

几个测试:

下面这个例子,数据太大时,应当会出错:由于精度问题、表示范围问题。
正解:Fibonacci(50) = 12 586 269 025
而且注意下面的耗时,也很长。

查看课本可知,long int的表示范围是:
-2 147 483 648 ~ 2 147 483 647(10位数)。而上面Fibonacci(50)结果是11位数,当然会出错!

同样,下面结果也不对:
也是因为表示范围问题。
正解:Fibonacci(49) = 7 778 742 049

下面来测试个正确的结果:↓ ↓ ↓
在本机测试中,第46项即Fibonacci(46)应当是 long int 能测试的最大值了。
耗时8.822秒。

C语言代码实现——非递归

//非递归实现Fibonacci数列
#include <stdio.h>
long Fibonacci(int n);
int main(){int n;long k;printf("请输入n:");scanf("%d",&n);k=Fibonacci(n);putchar('\n');printf("Fibonacci(%d)=%ld\n",n,k);return 0;
}
//非递归实现Fibonacci数列
long Fibonacci(int n)
{int n1=1,n2=1;int t=0,i=0;if (n<3){ //即如果n为1或者2的话,那么Fibonacci(1) = Fibonacci(2)=1 return 1;}else  //下面举个例子,便于理解: {//例如n为6,我们知道Fibonacci数列为:1、1、2、3、5、8...//此时对于下面for循环,则i=0,i<4。开始时n1和n2都是1,即第一和第二项 for(i=0; i<n-2; i++){    t = n1 + n2; //t就是数列第三项,为 1+1=2 n1 = n2; //注意:令n2赋值给n1,即n1和n2分别 后移一位,这时新的n1即第二项F(2)=1 n2 = t; //这里同理,t作为新的n2,即F(3)=2 //依次类推,即可实现求每一项,然后得到 Fibonacci(6),即 Fibonacci(n) }//注意:如果还不好理解,那么动笔写一下就会理解啦! return t;}
}

我觉得我把注释写的已经比较清楚了,如果不明白的话,看一下下面这个图,应该会很好理解:

那么接下来还是几个测试:



事实证明,上面的结果是正确的。

(另外,对于斐波那契数列的前100项,我将以一个txt的格式上传到“资源”中,可以直接下载。)

至于选用哪个,建议初学者还是使用递归的方式,更便于理解。

【C语言】斐波那契数列(Fibonacci sequence)递归实现 和 非递归实现相关推荐

  1. matlab 斐波那契数列Fibonacci Sequence

    斐波那契数列Fibonacci Sequence 主代码 %% 清理可能存在的旧数据 clc; % 清屏 clear; % 清除变量 close; % 关闭可能存在的窗口 %% 调用主要代码 n = ...

  2. 求解斐波那契数列(Fibonacci Numbers)算法居然有9种,你知道哪几种吗?

    By LongLuo 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&q ...

  3. c语言斐波那契数列递归数组,c语言斐波那契数列递归法

    斐波那契数列递归 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&quo ...

  4. 斐波那契数列 (Fibonacci) 多种实现方法(Python)与详细介绍

    斐波那契数列 Fibonacci Sequence 本文介绍了多种方式得到斐波那契数列或斐波那契数.斐波那契数列也称为"兔子数列".来源于兔子繁殖的预测.它的重要性体现在相邻两数之 ...

  5. JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码)

    JavaScript实现以数组形式返回斐波那契数列fibonacci算法(附完整源码) fibonacci.js完整源代码 fibonacci.js完整源代码 export default funct ...

  6. 斐波那契数列(Fibonacci) - 这就是算法吗?爱了爱了

    斐波那契数列(Fibonacci) 今天开始做牛客的剑指Offie,一看到斐波那契我就想到递归,是它是它就是它,然后我就满怀期待地写下了下面地代码.ok,没问题,一次性过.然而,我滴老天鹅,才击败30 ...

  7. Java数据结构与算法---斐波那契数列Fibonacci

    Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...

  8. python利用递归函数实现斐波那契数列_Python使用while循环输出斐波那契数列(Fibonacci)...

    斐波那契数列又称费波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数.斐波那契数列.费氏数列.黄金分割数列.在西方,首先研究这个数列的是比萨的列奥那多(意大利人 ...

  9. JAVA编程:斐波那契数列(Fibonacci)

    JAVA编程09:斐波那契数列(Fibonacci),输入一个数据n,计算[斐波那契数]列(Fibonacci)的第n个值 需调用run9方法 /*输入一个数据n,计算[斐波那契数]列(Fibonac ...

  10. c语言斐波那契数列_斐波那契数列之美

    美妙绝伦的基本算法 Image by Gerd Altmann on Pixabay 在研究和进行有关数据处理,计算相关计算机或数学运算的研究时,我们遇到了很多算法. 即使有时候我们不太喜欢数学,但我 ...

最新文章

  1. 高并发系列:存储优化之也许可能是史上最详尽的分库分表文章之一
  2. 【转】nginx提示:500 Internal Server Error错误的解决方法
  3. linux 信号处理
  4. python tf_TF 2.1.0-rc2发布,2020年停止支持Python 2
  5. (带动画效果)卷积神经网络的讲解.pptx
  6. 【推荐实践】微博在线机器学习和深度学习实践(文末附PPT下载链接)
  7. +0.5(加0.5)配合int()实现四舍五入
  8. 159.Oracle数据库SQL开发之 SQL优化——若干
  9. 【52】NVMe暴力热插拔对系统的要求
  10. 【Python爬虫】爬取大众点评团购详情及团购评论
  11. 唐僧向李世民汇报627年度工作总结报告,堪称国际水平!
  12. 怎样修改linux(虚拟机)系统开机密码
  13. python基础入门练习(字符串练习)
  14. 2019/01/29 一位前端实习生 艰辛过程 励志 实习周记(五)——第六周
  15. 家居行业渠道商销售系统线上线下一体化运作,促进产品更新迭代
  16. 字节跳动面试总结-3.18
  17. python语言是解释型语言-解释型语言python
  18. python 行列式_python 中leastsq 中的雅可比行列式的作用是什么
  19. 1.1 Java基础(一)概述
  20. python百度AI的人流量统计(静态1)

热门文章

  1. OUTLOOK之不能直接发送邮件的Mapi错误解决方法
  2. 共阴数码管与共阳数码管工作原理有什么不同
  3. rk3566 Android 11添加自定义service并提供jar包
  4. 波士顿出新品,10只机器狗拖动大卡车
  5. python爬网易云_如何用爬虫获取网易云音乐歌单中的歌曲?
  6. IOS 开发笔记——二维码的生成和扫描
  7. 在HTML中加入CSS有三种方式,html引入css的几种方式(复习笔记)
  8. HDU4903The only survival(clj计数问题ppt)
  9. 华为儿童手表3Pro安装第三方软件(固件升级后)
  10. 安卓开发——问题:getFragmentManager().beginTransaction().add()传入v4.fragment出错