Java眼中的汉诺塔问题【递归】
目录
学习路线
物联网
locket
python技能树
vendor.js过大
rk3568
分布式计算
ViT
高德定位
centos
📖汉诺塔简介
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
劳斯判据
高并发
🙈汉诺塔问题
现在有三根柱子,分别为A、B、C,现在在A柱子上有64个盘子,大小不一样,大盘子在下边,小盘子在上边。现在需要把64个盘子挪到C柱子上,请问怎样挪动,需要多少次才能完成?
ARM编译工具链
💡问题分析
1️⃣1个盘子
首先我们不去考虑64个盘子,我们来看一个盘子的情况
USART
链游脚本
➡️直接挪(A——>C)只需要1次(2^1-1):
YYModel的结构分析
transformer
2️⃣2个盘子
实例分割
➡️A——>C A——->B B——–>C 只需要3次(2^2-1)
性能优化
安卓开发
3️⃣3个盘子
Solidity
➡️A——>C A——->B C——–>B A——>C B——->A B——–>C A——–>C 只需要7次(2^3-1)
ide
强化学习
Linux 下,一切皆文件
物体检测
👉总结
当有64个盘子时,需要挪动2^64-1,这是一个庞大的数字,这时候就需要我们使用计算机程序来实现这个数字。
当有n个盘子,现在想办法的是,把n-1个盘子放在B上,把第n个盘子放在C上,最后把n-1个盘子放在C上。
📝代码实现【java】
//汉诺塔
//一个盘子 A---->C 1
//两个盘子 A---->B A----->C B---->C 3
//三个盘子 A---->C A----->B C----->B 7 2^N - 1
//64 2^64-1
/*
*
* @param n
* @param pos1 起始位置
* @param pos2 中转位置
* @param pos3 目的位置
*/
public static void Hanoi(int n, char pos1, char pos2, char pos3) {
if(n == 1) {
move(pos1, pos3);
return;
}
Hanoi(n-1, pos1, pos3, pos2);//n-1个盘子从pos1借助pos3移动到pos2中:pos1----->pos3
move(pos1, pos3);//第n个盘子从挪到pos3中
Hanoi(n-1, pos2, pos1, pos3);//n-1个盘子从pos2借助pos1到pos3中
}
public static void move(char pos1, char pos2) {
System.out.print(pos1 + "->" + pos2 + " ");
}
public static void main(String[] args) {
Hanoi(1,'A', 'B', 'C');
System.out.println();
Hanoi(2,'A', 'B', 'C');
System.out.println();
Hanoi(3,'A', 'B', 'C');
}
声明:本站博客内容版权均属于原作者所有,这里所提供资源均只能用于参考学习用,书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。