08算法入门教程递归算法之斐波那契数列
1. 前言
本节内容是递归算法系列之一:斐波那契数列递归求解,主要介绍了斐波那契数列的定义,然后用递归的实现思想分析了一下斐波那契数列,最后给出了基于 Java 代码应用递归思想实现斐波那契数列的代码实现及简单讲解。 2. 什么是斐波那契数列?
斐波那契数列(Fibonacci sequence),也称之为黄金分割数列,由意大利数学家列昂纳多・斐波那契(Leonardo Fibonacci)提出。斐波那契数列指的是这样的一个数列:1、1、2、3、5、8、13、21、34、……,这个数列从第 3 项开始,每一项都等于前面两项之和。在数学上,斐波那契数列可以被递推的方法定义如下:
F (1)=1, F (2)=1, F (n)= F (n - 1)+ F (n - 2)( n 3, n N*)
斐波那契数列是数学上面一个经典的例子,并且在日常生活中有很多应用,他还与黄金分割有着密不可分的联系,而且当 n 趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割值 0.618。 3. 用递归方法求解斐波那契数列
在这一节中,我们就需要利用递归的思想去求解斐波那契数列,当给出一个斐波那契中第几项的数字,然后求解出对应的斐波那契数值。在之前,我们已经定义了递归算法的相关概念,并且明确了需要应用递归时候的三要素: 递归终止条件; 递归终止时候的处理方法; 递归中重复的逻辑提取,缩小问题规模。
接下来,我们将利用递归的知识来解决斐波那契数列问题,明确在斐波那契数列求解问题中的递归三要素分别是什么。
斐波那契数列的递归终止条件 显然易见,通过观察斐波那契数列的定义,我们很容易发现当 n=1 或者 n=2 时,是斐波那契数列的递归终止条件,这个时候可以给出斐波那契数列的具体值。
斐波那契数列递归终止时候的处理方法 同样的,基于斐波那契数列的递推定义,当斐波那契数列达到终止条件 n=1 或者 n=2 时,我们也很容易发现对应 F (1)=1, F (2)=1,这就是斐波那契数列在递归终止时对应的取值。
斐波那契数列的递归重复逻辑提取 按照斐波那契数列的数学定义, F (n)= F (n - 1)+ F (n - 2)( n 3, n N*),即当 n 3 时,斐波那契数列中这一项的值等于前面两项的值之和,这样便可以将求解一个比较大的斐波那契数列转化为求解较小数值的斐波那契数列值,这里面有重复逻辑可以递归复用。
例如,当我们求解斐波那契数列中的 F (5) 时,按照定义,我们有:
F (5) = F (4) + F (3) // 递归分解 = ( F (3) + F (2) ) + ( F (2)+ F (1) ) // 递归求解 = [ ( F (2)+ F (1) ) + 1 ] + ( 1+1 ) // 递归求解,遇到终止条件就求解 = [(1+1) +1 ]+(1+1) // 归并 = 3 + 2 // 归并 = 5 // 归并 4. 基于 Java 代码示例及实现讲解
在说明斐波那契数列的递归描述之后,我们看看如何用 Java 代码来实现对斐波那契数列的计算。 public class Fibonacci { public static void main(String[] args){ System.out.println(fibonacci(1)); System.out.println(fibonacci(2)); System.out.println(fibonacci(3)); System.out.println(fibonacci(4)); System.out.println(fibonacci(5)); } //斐波那契数列数列的计算 private static int fibonacci(int n){ //如果是终止条件,按照要求返回终止条件对应结果 if( n==1 || n==2 ){ return 1; }else { //非终止条件,按照要求把大的问题拆分成小问题,调用自身函数递归处理 return fibonacci(n-1)+fibonacci(n-2); } } }
运行结果如下: 1 1 2 3 5
代码中的第 4 行至第 8 行分别调用斐波那契数列计算函数,计算出斐波那契数列中对应 n=1,2,3,4,5 时斐波那契数列的取值,进行结果比较,判断斐波那契数列程序实现是否正确。代码中的第 12 行至第 20 行是斐波那契数列应用递归方法进行斐波那契数列的计算,按照递归的三要素进行计算处理。 5. 小结
本节主要介绍了用递归思想求解斐波那契数列,在学完本节课程之后,我们了解到了什么是斐波那契数列,并且将递归算法在斐波那契数列中进行了实际应用,需要掌握斐波那契数列的递归求解方法,并自己可以实现相关的代码实现,并清楚里面的每一步逻辑。
清朗互联网用户帐号运营乱象专项整治行动公告(第三期)为落实国家网信办和北京网信办清朗系列专项行动要求,即日起,今日头条开展低俗谩骂专项整治行动,将重点整治昵称中带有明显低俗或者辱骂性词汇组合的,净化网络环境。今日头条始终致力于与各界
高端小米,雷军求稳雷军21日在微博宣布,小米高端手机开始对标苹果,在产品品质和规格方面向苹果学习。对此,有网友调侃对标苹果没有问题,但不要只对标价格。苹果在高端手机市场中的成功,没有一家国产手机想要
Java设计模式之观察者模式一概述观察者模式,又可以称之为发布订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情
Java设计模式之适配器模式一简介适配器可视为一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。适配器模式有三种类适配器对象适配器接口
炸锅!盒马突然放大招,生鲜巨头暴跌65,蒸发360亿!霸气回应老二最大的梦想就是拼死跟老大干一场中国基金报安曼在挑衅竞争对手方面,阿里旗下的各个团队绝对是王者中的王者。前面有钉钉团队跑去腾讯楼下的地铁,包下整面墙广告暗讽微信不安全,近日,盒马又在上海地区搞出了斩钉价,被网友们
支付强监管!支付宝微信支付被分流,聚合支付或将崛起文刘青青王倩IDBMR2004个人收款码的事我也是刚刚听人聊起才知道,虽然大家都在讨论,但是也不是什么大事。一位果蔬小摊贩对商学院记者表示,就是商户二维码要更贵一些。近日,关于20
研发仅仅3年龍鹰一号在汉亮相龍鹰一号晶圆。通讯员李岿摄长江日报记者邓志鹏通讯员郑奇悦范妤欣刘新12月10日下午,芯擎科技在武汉经开区正式发布车用芯片品牌龍鹰首款7纳米高端智能座舱芯片龍鹰一号。芯擎科技于201
雷军小米12Pro明天发布,五大技术突破随着小米12Pro发布临近,关于这款手机的技术也被雷总披露。五大技术突破,五大技术突破,五大技术突破,重要的事情说三遍,雷军说,小米12Pro这五大技术突破包括动态性能调度自研技术
售价3千起,小米12系列3款产品全面对标苹果,你说有戏吗?28日即将发布的小米12系列手机,最近在手机圈热度一直很高,尤其是雷军发声要对标三星苹果,更是让大家对这部手机充满期待,目前手机的配置大家也已经了解的差不多了,但价格方面会不会和三
华为display命令中的正则表达式display命令中的正则表达式正则表达式正则表达式(regularexpression)是一种模式匹配工具,用户根据一定的规则构建匹配模式,然后将匹配模式与目标对象进行匹配。正则
做美团的心情录大家好,我是一位美团小哥,今天我想在这里和大家聊聊我自己做美团小哥这四年来的点点滴滴和我自己的生活!我是2018年加入了美团的,在我以前的时候也经常听到跑外卖是多么多么得挣钱一个月