什么是递归

递归简单来说就是方法调用自己

例子1:

从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山..

例子2:美女拿着自己的照片,照片里面美女拿着照片,照片里面美女拿着照片..

简单的递归程序思路

/** 简单的递归程序测试*/
public class TestRecursive {public static void main(String[] args) {print(10);}public static void print(int value) {System.out.println(value);print(value - 1);}
}

要停止递归的话要弄一个小出口,比如将上面的print(int value)方法改成如下,就能实现只打印出0~10

public static void print(int value) {System.out.println(value);//加一个停止递归的条件if(value >0)print(value - 1);}

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

斐波那契:1 1 2 3 5 8 13 ....从第三项开始的值是前两项的和

//递归斐波那契数列:1 1 2 3 5 8 13....,设计一个方法求第i项为多少
public class TestFebonacci {public static void main(String[] args) {System.out.println(sum(7));System.out.println(febonacci(8));}//自己思路写的public static int sum(int i) {int sum = 0;if(i == 1) {sum = 1;}else if(i == 2){sum = 1;}else {sum = sum(i -1) + sum(i -2);}return sum;}//老师写的精辟斐波那契public static int febonacci(int i) {//若为前两项,则都为1if(i == 1 || i ==2) return 1;//否则都是前两项的和else return febonacci(i - 1) + febonacci(i - 2);}
}

递归经典应用2:汉诺塔

1      1      1        三根柱子

①开始:盘子都在左边的柱子(多个盘子时,小的盘子放上面,大的盘子放下面)

②目的:把所有盘子都移到右边的柱子

③每次移动只能移动一个盘子,而且盘子大小的顺序只能从上到下的小到大的顺序

public class TestHanoi {public static void main(String[] args) {hanoi(2,'A','B','C');}/*汉诺塔问题,三根柱子*        1       1         1  *    from      in        to* 开始的地方  中间的位置  目标位置* 把所有盘子从左边柱子移到右边柱子上面,每次只能移动一个盘子,盘子上到下是小到大* 把上面的移到中间柱子* 最下面的移到第三个柱子* 把原上面的从中间的柱子移动到第三个柱子上面*/ public static void hanoi(int n,char from,char in,char to) {//只有一个盘子if(n == 1) {System.out.println("第1个盘子从 "+from+" 移到 "+to);//无论有多少个盘子,都认为只有两个.上面的所有盘子和最下面一个盘子}else{//移动上面所有的盘子到中间位置hanoi(n-1,from,to,in);//移动最下面的盘子到右边柱子System.out.println("第" + n + "个盘子从 " + from + " 移到 " + to);//把(原)上面的所有盘子从中间位置移到目标位置hanoi(n-1,in,from,to);}}
}

简洁笔记-Java数据结构基础(5.递归和斐波那契数列、汉诺塔)相关推荐

  1. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  2. c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列

    自己对递归还是不太熟练,于是做的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归.然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问 ...

  3. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  4. 两个经典递归问题:菲波那契数列 + 汉诺塔

    一.递归问题的处理步骤 1)抽象出递归公式:对实际问题进行部分穷举,抽象出递归关系(关键),并列出"递归表达式" 2)确定递归出口:找出递归调用终止点 二.菲波那契数列 实际问题: ...

  5. 数据结构Java02【栈、队列、单链表(增删节点)、循环链表、双向循环链表、递归(斐波那契、汉诺塔)】

    学习地址:[数据结构与算法基础-java版]                  

  6. 斐波那契递归调用次数_递归求解斐波那契数列的时间复杂度——几种简洁证明...

    TL:DR: 暴力递归求解斐波那契数列的时间复杂度的紧界不是 ,而是 . 本文将给出几个简洁证明 用最暴力的方法求解斐波那契数列,时间复杂度是多少?具体地说,就是求下面这个程序的复杂度: def fi ...

  7. 【2023王道数据结构】【绪论】思维拓展-通过C++递归与非递归实现斐波那契数列C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 通过C++递归与非递归实现斐波那契数 ...

  8. 算法—递归生成斐波那契数列

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.递归生成斐波那契数列 二.使用步骤 1.伪代码 2.c 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如 ...

  9. 递归实现斐波那契数列

    关于递归求斐波那契数列 首先明白斐波那契数列的特点 即从第三个数开始,数列中的每一项等于其前两项之和,且其前两项都为1 了解其特征后,选择合适的算法解决 这里采用的是经典的递归算法 什么是递归算法? ...

最新文章

  1. Linux 4.0 里,你可能再也不需要重启你的操作系统。
  2. LeetCode 549. 二叉树中最长的连续序列(树上DP)
  3. 用websocket技术开发的web聊天系统
  4. rsyslog 日志管理服务
  5. 3DMM及eos人脸重建
  6. stata 导出 相关系数表_【BBtime】戏说会计论文---stata简单实操
  7. 计算机03年word做母亲节贺卡,《WORD贺卡的制作—母亲节快乐》教学反思
  8. pci规划的三个原则_PCI规划应遵循什么原则? - 51学通信网络课堂 - 通信人值得信赖的在线交流学习平台 - Powered By EduSoho...
  9. Flutter listview下拉刷新 上拉加载更多 功能实现
  10. BLAST原理和用法总结(一)
  11. repo forall -c命令
  12. MyDockFinder Steam版的新增功能和下载
  13. JS获取浏览器可视区域宽高
  14. 查询mysql数据库表占用空间大小_查看 MySQL 数据库中每个表占用的空间大小-阿里云开发者社区...
  15. 备战考研是否需要ipad?
  16. XAMMP配置之Attempting to start MySQL service...问题
  17. 软件体系结构4+1模型
  18. 基于工科科研组会经常被大BOSS批评之改革计划
  19. C语言-简介(初识)_成仙不问道
  20. 微软献给寂寞程序员同志们的…

热门文章

  1. 校园点餐管理系统(附源代码及数据库)
  2. 跟着google工程师学Go语言(二十四):单任务版爬虫
  3. 如何做一个桌面时钟?
  4. 什么是Socket,为什么要用Socket
  5. opensips与对方tls sip trunk对接注意事项
  6. Handler dispatch failed; nested exception is java.lang.NoSuchFieldError: TLS_ECDHE_ECDSA_WITH_CHACHA
  7. 为input边框添加圆角
  8. 关于积化和差,和差化积的记忆方法
  9. 分享美食的意义何在?
  10. 将DP83848替换成LAN8720配置