背景说明

Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初
只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。如果不太理解这个例子的
话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数列,一般
习惯称之为费氏数列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89......

算法说明

仔细观察这个数列,会发现,除了第1个数和第2个数除外,从第3个数开始,第N个数等于它前面两个数之和,也就是这个数列的通项公式为f(n)=f(n-1)+f(n-2) (n>=2,n∈正整数)。

解法

这道题,就像是我们高中时的数学题,就是给一个背景,然后算第N项或者前N项和。我们一般的步骤都是先找数列的关系,然后推导出它的通项公式,在求解。而费氏数列的通项公式就是如下:
① f(n)=n,(n<=1,n∈正整数)
② f(n)=f(n-1)+f(n-2) (n>=2,n∈正整数)
所以,根据这个通项公式,我们就可以求解了。
public class 费式数列 {/*** @author Helen* Nov 21, 2014 10:30:46 AM* @param args* void* TODO*/public static void main(String[] args) {int n;Scanner input=new Scanner(System.in);System.out.println("请输入N:");n=input.nextInt();input.close();long t=System.currentTimeMillis();cal(n);System.out.println();System.out.println("cal耗时:"+(System.currentTimeMillis()-t));t=System.currentTimeMillis();for (int i = 1; i < n; i++) {System.out.print(cal2(i)+",");}System.out.println();System.out.println("cal2耗时:"+(System.currentTimeMillis()-t));}public static void cal(int n){int[] Fib=new int[n];//f(n)=n,if n=0,n=1Fib[0]=0;Fib[1]=1;//f(n)=f(n-1)+f(n-2),if n>=2for (int i = 2; i < Fib.length; i++) {Fib[i]=Fib[i-1]+Fib[i-2];}for (int i : Fib) {System.out.print(i+",");}}/*** * @author Helen* Nov 21, 2014 11:13:56 AM* @param n* @return* int* TODO 递归(耗时)*/public static int cal2(int n){if(n==0||n==1){return n;}else{return cal2(n-1)+cal2(n-2);}}
}

第一种是常规算法,每次都将计算后的数保存到一个数组里面,这样在计算第N个数的时候就可以从数组里直接取出第N-1和第N-2的数了;第二种递归算法是比较耗时的,可以看出第二种每次计算第N个数时,它都要从第0(或1)个开始算起。

经典算法大全之费式数列相关推荐

  1. c语言 兔子数列螺线图,经典算法大全51例——2.斐波那契数列(兔子数列)

    经典算法大全51例--2.斐波那契数列 算法目录合集 地址 说明 题目 原理分析 代码实现--Java 相关题目其他变形: 1.爬楼梯(来源:力扣LeetCode) 2.兔子成熟期拉长 官方题解 分析 ...

  2. JAVA经典算法大全

    JAVA经典算法大全 from http://java-mans.iteye.com/blog/16457031.河内之塔 2.Algorithm Gossip: 费式数列. 3.巴斯卡三角形 4.A ...

  3. 【经典算法大全】收集51种经典算法 初学者必备

    <经典算法大全>是一款IOS平台的应用.里面收录了51种常用算法,都是一些基础问题.博主觊觎了好久,可悲哀的是博主没有苹果,所以从网上下了老奔的整理版并且每个都手敲了一遍. 虽然网上也有博 ...

  4. 计算机语言算法大全,经典算法大全

    标签: 算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求 ...

  5. 经典算法大全51例——3.杨辉三角(又称帕斯卡三角形)

    经典算法大全51例--3.杨辉三角(又称帕斯卡三角形) 算法目录合集 地址 说明 题目以及个人题解 原理分析 思路一--纵向寻踪 思路二--横向寻踪 代码实现--Java 方式一--纵向寻踪 方式二- ...

  6. 经典算法大全51例——56.老鼠走迷官

    经典算法大全51例--5&6.老鼠走迷官 算法目录合集 地址 说明 题目以及个人题解 说明 题目 原理分析 问题① 原理 代码实现--Java 问题② 原理 代码实现--Java 相关题目其他 ...

  7. 经典算法问题 - 最大连续子数列和

    转载自:https://www.cnblogs.com/conw/p/5896155.html 最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续 ...

  8. c语言经典算法大全pdf,c语言经典算法100例pdf版.pdf

    c语言经典算法100例pdf版 C 语言经典算法 100 例 C 语言编程经典 100 例 A:[程序1] 题目:有1.2.3.4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程 ...

  9. 经典算法——斐波那契数列

    斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2)   n>2 f(1)=1      n=1 f(2)=1      n=2 按照这个思路可以写出递归算法: #in ...

  10. C语言中经典算法——斐波那契数列的几种算法

    斐波那契数列的递推公式: 我们尝试计算斐波那契数列的第n项并输出. 1.递归法 #include<stdio.h> int fib(int m) {if(m>=3){return f ...

最新文章

  1. 三十之惑–面霸的八月(第二部分)
  2. DSML:深度子空间相互学习模型(用于癌症亚型预测)
  3. CRM产品主数据在行业解决方案industry solution中的应用
  4. tomcat怎么平滑更新项目_tomcat_deploy 平滑启动脚本
  5. 计算机教授丁三石,一次难忘的计算机课!!
  6. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixe 后缀数组
  7. Android编程之如何取得View的当前位置
  8. 修改web.conf不重启服务的方法
  9. curl header设置参数
  10. 小程序-Hello World
  11. 酷派无线升级服务器设置在哪里,酷派手机CDA自助升级线刷工具安装教程
  12. WPS加载项部署运行问题排查方法
  13. 频谱泄漏 matlab,频谱泄漏与窗函数.ppt
  14. android 11.0 12.0去掉前置摄像头闪光灯功能
  15. ae教程 (五)滤镜特效 (五)描边光效
  16. 需要程序猿了解的 89 个操作系统核心知识
  17. Unity最新版打包AssetBundle和加载的方法
  18. 1471_TC275的内核种类以及ID判断
  19. windows10下安装MSYS2+MinGW64
  20. Java图片处理 - 复制

热门文章

  1. 对数换底公式及推导证明
  2. [渝粤教育] 西南科技大学 翻译 在线考试复习资料
  3. google hacking
  4. 单龙芯3A3000-7A1000PMON研究学习-(30)撸起袖子干-再来一杯代码11-内存初始化3-mc_init
  5. QT版用QLCDnumber显示时间
  6. 8、OpenCV调整图像对比度和亮度
  7. 机器学习(十)——支持向量机
  8. 电源反馈电路设计经验(PC817光耦隔离+TL431)
  9. Scratch跑酷游戏
  10. 管理型工业以太网交换机什么