Java算法–第二章–查找与排序(2)递归基础

一、找重复
1.找到一种划分方法
2.找到递推公式或者等价转换
都是父问题转化为求解子问题

二、找变化的量
变化的量通常要作为参数

三、找出出口

代码:

package section02;public class 递归基础 {public static void main(String[] args) {// 佩波那契System.out.println(fib(5));printHannuoiTower(4, "第一根", "第二根", "第三根");}/** 佩波那契数列*/static int fib(int n) {if (n == 1 || n == 2)return 1;return fib(n - 1) + fib(n - 2);}/** 最大公约数*/static int gcd(int m, int n) {if (n == 0)return m;return gcd(n, m % n);}/** 对数组进行插入排序 * 等价于:对数组的0到倒数第二个元素部分进行排序,然后把最后一个元素擦汗如到这个有序的部分中。*/static void insertSort(int[] arr, int k) {if (k == 0)return;// 对前k - 1个元素排序insertSort(arr, k - 1);int x = arr[k];int index = k - 1;while (x < arr[index]) {arr[index + 1] = arr[index];index--;}arr[index + 1] = x;}/** 汉诺塔*/static void printHannuoiTower(int N, String from, String to, String help) {if (N == 1) {System.out.println("move " + N + " from " + from + " to " + to);} else {printHannuoiTower(N-1, from, help, to);//先把前N-1个盘子搬到辅助空间上去System.out.println("move " + N + " from " + from + " to " + to);//N可以顺利到达targetprintHannuoiTower(N-1, help, to, from);//让N-1从辅助空间回到原空间上去}}
}

输出:

5
move 1 from 第一根 to 第三根
move 2 from 第一根 to 第二根
move 1 from 第三根 to 第二根
move 3 from 第一根 to 第三根
move 1 from 第二根 to 第一根
move 2 from 第二根 to 第三根
move 1 from 第一根 to 第三根
move 4 from 第一根 to 第二根
move 1 from 第三根 to 第二根
move 2 from 第三根 to 第一根
move 1 from 第二根 to 第一根
move 3 from 第三根 to 第二根
move 1 from 第一根 to 第三根
move 2 from 第一根 to 第二根
move 1 from 第三根 to 第二根

汉诺塔:1~N从A移动到B,C作为辅助
等价于–>
1、1~N-1从A移动到C,B作为辅助
2、把N从A移动到B
3、1~N-1从C移动到B,A作为辅助

Java算法--第二章--查找与排序(2)递归基础--佩波那契最大公约数插入排序汉诺塔相关推荐

  1. 【算法设计zxd】第2章 算法分析实例 递归非递归——交换,n阶乘,矩阵乘法,汉诺塔,二路归并,

    目录 非递归形式算法分析: 递归形式算法分析: [例2-9]交换a和b的值. 非递归 [例2-10]求n! 非递归: 思考题:韩信点兵 [例2-11]对于任意给定的n阶方阵A和B,求A×B的积C并且 ...

  2. 二分查找、分治算法——汉诺塔问题

    一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...

  3. 三十三、分治算法---汉诺塔问题

    一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...

  4. 分治算法——汉诺塔(HanoiTower)

    分治算法--汉诺塔 介绍 分治算法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子 ...

  5. C++Tower of Hanoi汉诺塔的实现算法(附完整源码)

    C++Tower of Hanoi汉诺塔的实现算法 C++Tower of Hanoi汉诺塔的实现算法完整源码(定义,实现,main函数测试) C++Tower of Hanoi汉诺塔的实现算法完整源 ...

  6. 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)

    第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...

  7. (二)Java算法:插值查找

    目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点   插值查找,有序表的一种查找方式.插值查找是根 ...

  8. 第二章 查询结果排序(SQL server经典实例)

    第二章 查询结果排序(SQL sever经典实例) 本章目录 第二章 查询结果排序(SQL sever经典实例) 1. 以指定顺序返回查询结果 2. 多字段排序 3. 根据子串排序 4. 排序时对nu ...

  9. java 3D 第二章 java 3D基本概念

    java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...

最新文章

  1. ActionScript 3操作XML 详解
  2. 谈谈垃圾回收机制方式及内存管理
  3. 开发HTML5的强大9个开发工具
  4. AS3汉字sokcet传送编码问题
  5. IDEA不能导入List包
  6. MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据
  7. 防抖debounce和节流throttle
  8. 你愿意隐姓埋名一辈子吗?
  9. 使用CrossOver安装第三方软件
  10. 2014北科计算机原理试题答案,2014北科计算机组成原理试题
  11. 礼物linux项目,好玩的Linux命令,将礼品包在盒子中
  12. HBase 过滤器使用
  13. 每天下午5点使用计算机结束时断开终端的连,在每天下午5点使用计算机结束时断开终端的连接属于()...
  14. amcharts的使用
  15. 阿里天池大数据之移动推荐算法大赛总结及代码全公布
  16. 判断当前是否是移动端H5打开
  17. Socket hang up
  18. create和qypt qt_pyqt 与 qt c++ 开发windows客户端程序区别
  19. 因果推断笔记——因果图建模之Uber开源的CausalML(十二)
  20. 微信小程序:实现简单的拼券功能(uniCloud)

热门文章

  1. IIR数字滤波器设计(数字信号处理)
  2. 基于FPGA的数字滤波器设计(IIR滤波)
  3. 到底vuex是什么?
  4. 2022年MySQL最新面试题
  5. SQL语法分析-基础篇
  6. vr授权服务器虚拟机,vm虚拟机上的连接远程服务器
  7. VM-tools选项为灰色无法安装的问题
  8. 计算机夯实基础学习顺序
  9. div失去焦点事件onblur()不触发解决方法
  10. 【Day12-Stream流Map集合】