汉诺塔详解

本文深入探讨了汉诺塔问题的经典递归解决方案,详细解释了如何通过递归调用将大盘子移动到目标柱子的过程。文章通过具体实例演示了递归回溯的步骤,帮助读者理解汉诺塔问题的解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汉诺塔用到的就是典型的递归,当盘子数等于1的时候,直接可以从A—》C
否则的话就是把盘子通过借助 B,移动到C
当我们去推的时候,一定要注意n等于3,n等于2,n等于1,n等于2,n等于3,这个回溯的过程,代码中有推的部分,可以看下,蟹蟹
import java.util.Scanner;

public class Hannuota {
public static void pan(int n,char a,char b,char c){
if(n1){
System.out.println(a+"---->"+c);
}else{
pan(n-1,a,c,b);
System.out.println(a+"—>"+c);
pan(n-1,b,a,c);
}
}
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.println(“请输入盘子的数量”);
int a=scanner.nextInt();
pan(a,‘1’,‘2’,‘3’);
//注意:当盘子数大于3时,每次的pan()时,柱子会变动,拿3为例子:
/*
* 输入3,pan(3,1,2,3)n不等于1,pan(2,1,3,2)—》n 不等于1,
*注意:到这的时候,应该是套用上一个(2,1(a),3(b),2(c))//
* pan(1,1,2,3)—》n
1—>system.out.print(1—>3)
* 现在是回溯到n2的时候
* system.out.println(1—>2)—>pan(1,3,1,2)—>
* system.out.println(3—>2)
* 这特别注意,这要回溯到n
3时,—》system.out.println(1—>3)
* —>(2,2,1,3)
*
*/
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值