递归经典应用之斐波那契数列

(一)递归概念

将复杂问题 递推分解为最简问题 然后将结果回归的过程

Windows - Linux

Linux = Linux is not Unix

使用方法: 自己调用自己

(二)斐波那契数列

兔子问题
有一对大兔子 每个月繁衍 一对小兔子(一公一母)
小兔子 每个月生长为 大兔子

现有一对小兔子 一年后 有多少对?

M1 1 A
M2 1 A~
M3 2 A->B
M4 3 A->C + B~
M5 5 A->D + B->E + C~
M6 8 A->F + B->G + C->H + D~ + E~

当前的所有兔子 = 上个月的所有兔子 + 这个月新生的兔子(可以繁衍的兔子)
= 上个月的所有兔子数量 + 上上个月的所有兔子数量(经过了一个月的生长周期)

Mn = M(n-1) + M(n-2)

M5 = M4 + M3
= (M3+M2) + (M2+M1)
= (M2+M1 + M2) + (M2+M1)
= 1+1+1 + 1+1 = 5

M1=1 M2=1

使用方式:
1)推导出递推公式 —— 找规律
2)找到递推的出口 —— 找出口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7LFQx1Q-1613145269067)(C:/Users/meiqi/Desktop/images/image-20201009153027457.png)]

    public static int fib(int N) {if (N == 1) return 1;if (N == 2) return 1;System.out.println("求第" + N + "个月的兔子数量");System.out.println("转化为求第" + (N - 1) + "个月和第" + (N - 2) + "个月的兔子数量");return fib(N - 1) + fib(N - 2);}

大部分递归 可以转化为迭代处理

Make it work,Make it right,Make it fast

思路:使用数组存储,通过n-1和n-2的值进行计算

    public static int fib1(int N) {// 6 —— 0 1 2 3 4 5// fib(0) = 0  有时需要处理if (N <= 1) return 1;int[] arr = new int[N];arr[0] = 1;arr[1] = 1;for (int i = 2; i < arr.length; i++) {arr[i] = arr[i - 1] + arr[i - 2];}return arr[N - 1];}

递归经典应用之斐波那契数列相关推荐

  1. [python]练习之递归和循环实现斐波拉契数列

    1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...

  2. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  3. 笔试题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:递归的方法求解斐波那契数列、用概率与统计的数学方法解决,3.动态规划

    笔试题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.该题有三种解法:1.递归的方法求解斐波那契数列.2.用概率与统计的数学方法解决,3.动态规划 ...

  4. 利用递归、迭代解决斐波那契数列问题与汉诺塔难题

    有人说,"普通程序员使用迭代,天才程序员使用递归",真是这样吗? 1.浅谈递归与迭代 <1>递归的基本概念: 程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个 ...

  5. 数据结构与算法--再谈递归与循环(斐波那契数列)

    再谈递归与循环 在某些算法中,可能需要重复计算相同的问题,通常我们可以选择用递归或者循环两种方法.递归是一个函数内部的调用这个函数自身.循环则是通过设置计算的初始值以及终止条件,在一个范围内重复运算. ...

  6. Python 算法之递归与尾递归,斐波那契数列以及汉诺塔的实现

    文章目录 递归概念 递归要素 递归与迭代的区别 示例一:阶乘 示例二:斐波那契数列 示例三:汉诺塔问题 尾递归 Python 中尾递归的解决方案 递归概念 递归:程序调用自身的编程技巧称为递归( re ...

  7. 递归法 最大公倍数 斐波那契数列 数组插入排序改递归

    辗转相除法: 例如:m%n=0;能够整除则n为最大公倍数 若m%n=k,不能够整除的话,继续辗转相除变为n%k 若n%k=c,不能整除的话继续这样- 核心代码 static int gcd(int m ...

  8. AS3实现经典算法(一) 斐波纳契数列

    package{ /* 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上, 斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n- ...

  9. 时间复杂度 ( 递归实现阶乘、斐波那契数列第n个数) / 空间复杂度

    1 时间复杂度   时间复杂度是衡量程序运行的快慢,对于一个程序来说,运行速度的快慢,有很多干扰因素,不同的硬件条件都可能影响到速度的快慢.时间复杂度来衡量,不是精确的衡量,只是单纯从代码本身衡量程序 ...

最新文章

  1. 员工拒绝加班,被判赔公司1.8万!网友炸锅
  2. 编码实现字符串转整型的函数(实现函数atoi的功能)
  3. java search 不能使用方法_elasticsearch(七)java 搜索功能Search Request的介绍与使用...
  4. BUU——WMCTF2020 - easy_re
  5. golang包math/rand使用示例
  6. Hadoop技术之Hadoop HA 机制学习
  7. linux内核中用来对共享资源进行隔离,简单理解Docker
  8. wincc 服务器共享文件夹,wincc共享文件夹Simatic Shell中项目的互连是什么意思-工业支持中心-西门子中国...
  9. oracle 查看任务数量,关于dbms_scheduler创建任务数量的疑问
  10. java char 空_2020重新出发,JAVA入门,数据类型
  11. java禁止修改map_Java中实现不可变Map
  12. CVTE 2016 春季实习校招一面(C++后台)
  13. linux下iptables详解
  14. JavaScript的单线程性质以及定时器的工作原理
  15. 南宁研祥智谷远程预付费电能管理系统的应用
  16. word转html,word转pdf
  17. 百度把黑科技发布会开到央视,主持人连连感叹:文科生都看懂了
  18. 左耳朵耗子:从“打工人”到技术创业者,我是如何作死的
  19. 9 计算机键盘是一个______,一种计算机键盘专用的清洁装置专利_专利申请于2018-05-31_专利查询 - 天眼查...
  20. C#面向对象程序设计课程实验五:实验名称:C#面向对象技术

热门文章

  1. openfire总结
  2. 02-Linux设备分类和设备编号学习
  3. 提速50倍 阿里云发布全新一代高性能企业级存储家族
  4. 数字内容生产范式革新,AIGC如何续写元宇宙?
  5. 微信小程序:实现可拖动悬浮图标(包括按钮角标的实现)
  6. 浅析highchart
  7. CSS去除元素点击时出现的小竖杠
  8. linux read 用法
  9. 算法——二分法查找(binarySearch)
  10. 编译 OpenJDK