【Java】汉诺塔问题递归

本文介绍了一个经典的递归问题——汉诺塔。通过详细的步骤分解,展示了如何使用递归思想解决汉诺塔问题,并提供了一段Java实现代码。理解汉诺塔的递归解决方案,有助于深入掌握递归算法的原理。

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

汉诺塔是典型的递归问题
其思想是:n个盘子分为第n个盘子和前n-1个盘子,将前n-1个盘子先移动到C柱,将第n个盘子移动到B盘,最后再将前n-1个盘子移动到B盘(这一步是最后一步)
再将n-1个盘子递归就可以得出结果


import java.util.Scanner;

public class hanio汉诺塔 {
	static int step=1;
	static int count=0;
      public static void main(String arg[]) {
    	  Scanner sc=new Scanner(System.in);
    	  int n=sc.nextInt(); 
    	  hanio(n,'A','B','C');//将n从小到大摆放的盘子从A柱借助C柱移动到B柱
    	  System.out.println("total step:"+count);//需要的步数
      }

	private static void hanio(int n, char c, char d, char e) {
		if(n>0) {
			hanio(n-1,c,e,d);
			move(c,d);
			hanio(n-1,e,d,c);
		}
		
	}

	private static void move(char c, char d) {
		// TODO Auto-generated method stub
		System.out.println("Step "+step+" from "+c+" to "+d);//每次移动的步骤
		step++;
		count++;
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值