汉诺塔的java递归实现
来源:互联网 发布:三拼域名 不值钱 编辑:程序博客网 时间:2024/06/01 08:02
别用脑袋去想如何一步一步移动,因为人脑内存比较小,而且不适合栈操作,压着压着就忘了。特别是对于这种头递归,要记递归完了之后该继续哪些操作。
只要记得要将n个盘从A移到C的方法是:
1)如果n==1(只有1个盘),直接将其从A移到C即可,否则
2)将n-1个盘从A移借助C到B
3)将第n个盘从A移到C
4)再将n-1个盘从B移借助A到C
移动多个盘时都需要借助第三方柱子,并且跟原始问题只有规模不同,调用自身。
那么再问,将n个盘从A移到C要移动多少次呢?
设移动n个盘需要f(n)次,则有: f(n) = f(n-1) + 1 + f(n-1) = 2f(n-1) + 1, n>=2,f(1) = 1
这是一个通项公式,
可得, f(n) +1 = 2(f(n-1) + 1)
则,[f(n) +1]/[f(n-1) + 1] = 2
f(n) + 1是一个等比数列
f(n) = 2^n - 1
代码:
public class Hanoi {public static void main(String[] args) {Hanoi h = new Hanoi();h.solve(3, "a柱", "b柱", "c柱");}public void solve(int n, String src, String transfer, String dst) {if(n == 1) {move(n, src, dst);} else {solve(n-1, src, dst, transfer);move(n, src, dst);solve(n-1, transfer, src, dst);}}public void move(int n, String src, String dst) {System.out.println(n + " " + src + " -----> " + dst);}}输出:
1 a柱 -----> c柱2 a柱 -----> b柱1 c柱 -----> b柱3 a柱 -----> c柱1 b柱 -----> a柱2 b柱 -----> c柱1 a柱 -----> c柱
阅读全文
0 0
- 汉诺塔的java递归实现
- java递归实现汉诺塔
- Java递归实现汉诺塔
- 汉诺塔问题的java递归实现
- 递归实现汉诺塔的问题---java
- java的递归实现原理
- Java中递归的实现
- 递归的java简单实现
- Java递归的简单实现
- 汉诺塔的递归实现
- 汉诺塔的递归实现
- 汉诺塔的实现 递归
- 递归实现的 汉诺塔
- 汉诺塔的递归实现
- 汉诺塔的递归实现
- Java 递归实现汉诺塔问题
- java 递归实现汉诺塔问题
- 二项分布的递归和非递归实现(Java实现)
- 虚拟机安装Linux
- sql 计算两经纬度之间的距离
- spring boot整合RabbitMQ(Topic模式)
- 接口开发 face++人脸检测
- 常用的sharePreference工具类
- 汉诺塔的java递归实现
- 史上最盛大的黑科技年会前夕,阿里妹做了一个重大决定
- git第一次连接远程库出现无法添加到信任列表
- 【Selenium】13Frame
- 【学习笔记】C++字符串输入输出
- Linux查看CPU和内存使用情况
- 开发者分享 | 从零开始开发一个即时通讯项目
- AI成为CRM的基本配置?
- 二叉树后序遍历数组 -- 漫漫算法路 刷题篇