Java中的经典算法——汉诺塔问题

今天来说一说经典的算法问题换诺塔问题,这个问题比较容易理解,但是数比较大的时候机器计算花费的时间很长。

汉诺塔问题的解释,这里就不详细说了,给大家附上百度百科的链接大家了解一下。

以下是该程序的代码:

/*
 * Hanoi.java
 *
 *  Created on: 2020年2月22日
 *      Author: Sdjzu_Nxy
 */
package algorithm;

import java.util.Scanner;

public class Hanoi {
	static int i = 0;
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入圆盘的数量:");
		int number = input.nextInt();
//		System.out.printf("需要移动的次数:%f",hanoiMethod2(number));	
		System.out.println("移动过程如下:");
		hanoiMethod1(number,"A","B","C");
		System.out.printf("需要移动的次数:%d",i);
	}
	
	public static void hanoiMethod1(int number,String aNow,String bPass,String cDest) {
		if (number == 1) {
			i++;
			System.out.println(aNow+"--->"+cDest);
		}
		else {
			hanoiMethod1(number - 1, aNow,cDest,bPass);
			hanoiMethod1(1, aNow,bPass,cDest);
			hanoiMethod1(number - 1,bPass,aNow, cDest);
		}
	}
	
//	public static double hanoiMethod2(int number) {
//		double sum = Math.pow(2.0, (double)number);
//		return sum - 1.0;
//	}
}

算法分析:这里直接试一下程序函数部分吧,

	public static void hanoiMethod1(int number,String aNow,String bPass,String cDest) {
		if (number == 1) {
			i++;
			System.out.println(aNow+"--->"+cDest);
		}
		else {
			hanoiMethod1(number - 1, aNow,cDest,bPass);
			hanoiMethod1(1, aNow,bPass,cDest);
			hanoiMethod1(number - 1,bPass,aNow, cDest);
		}
	}

算法分析:先来解释其中函数的四个参数,number指的是圆盘的数目,aNow指的是目前圆盘所在的那个柱子,bPass指的是经过哪个柱子,cDest指的是最终移到哪根柱子;接下来就是采用递归的方式,为了便于解释,我们假设有3个圆盘,接下来我用图示说明:
在这里插入图片描述
算法可能不是很好理解,我也是通过简单的3个圆盘的例子,debug慢慢看的,Java的的经典算法,通过强哥的课程看了这么多,目前先告一段落了,如果以后再遇到算法的题目,我还会继续记录下来!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值