Java算法--第二章--查找与排序(2)递归基础--佩波那契最大公约数插入排序汉诺塔
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)递归基础--佩波那契最大公约数插入排序汉诺塔相关推荐
- 【算法设计zxd】第2章 算法分析实例 递归非递归——交换,n阶乘,矩阵乘法,汉诺塔,二路归并,
目录 非递归形式算法分析: 递归形式算法分析: [例2-9]交换a和b的值. 非递归 [例2-10]求n! 非递归: 思考题:韩信点兵 [例2-11]对于任意给定的n阶方阵A和B,求A×B的积C并且 ...
- 二分查找、分治算法——汉诺塔问题
一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...
- 三十三、分治算法---汉诺塔问题
一.分治算法的介绍 分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题--直到最后子问题可以 ...
- 分治算法——汉诺塔(HanoiTower)
分治算法--汉诺塔 介绍 分治算法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题···直到最后子 ...
- C++Tower of Hanoi汉诺塔的实现算法(附完整源码)
C++Tower of Hanoi汉诺塔的实现算法 C++Tower of Hanoi汉诺塔的实现算法完整源码(定义,实现,main函数测试) C++Tower of Hanoi汉诺塔的实现算法完整源 ...
- 【Java数据结构与算法】第十七章 二分查找(非递归)和分治算法(汉诺塔)
第十七章 二分查找(非递归)和分治算法(汉诺塔) 文章目录 第十七章 二分查找(非递归)和分治算法(汉诺塔) 一.二分查找 1.思路 2.代码实现 二.分治算法(汉诺塔) 1.概述 2.汉诺塔 一.二 ...
- (二)Java算法:插值查找
目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点 插值查找,有序表的一种查找方式.插值查找是根 ...
- 第二章 查询结果排序(SQL server经典实例)
第二章 查询结果排序(SQL sever经典实例) 本章目录 第二章 查询结果排序(SQL sever经典实例) 1. 以指定顺序返回查询结果 2. 多字段排序 3. 根据子串排序 4. 排序时对nu ...
- java 3D 第二章 java 3D基本概念
java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...
最新文章
- ActionScript 3操作XML 详解
- 谈谈垃圾回收机制方式及内存管理
- 开发HTML5的强大9个开发工具
- AS3汉字sokcet传送编码问题
- IDEA不能导入List包
- MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据
- 防抖debounce和节流throttle
- 你愿意隐姓埋名一辈子吗?
- 使用CrossOver安装第三方软件
- 2014北科计算机原理试题答案,2014北科计算机组成原理试题
- 礼物linux项目,好玩的Linux命令,将礼品包在盒子中
- HBase 过滤器使用
- 每天下午5点使用计算机结束时断开终端的连,在每天下午5点使用计算机结束时断开终端的连接属于()...
- amcharts的使用
- 阿里天池大数据之移动推荐算法大赛总结及代码全公布
- 判断当前是否是移动端H5打开
- Socket hang up
- create和qypt qt_pyqt 与 qt c++ 开发windows客户端程序区别
- 因果推断笔记——因果图建模之Uber开源的CausalML(十二)
- 微信小程序:实现简单的拼券功能(uniCloud)