JAVA基础学习—方法

JAVA基础学习—方法

使用递归解决汉诺塔问题:

  • 问题描述

    在古印度神话,在贝纳勒斯的圣庙安放着一块铜板,板上有3根宝石针。梵天(印度教的主神)在创造世界的时候,在其的一根针上摆放了由小到大共64片中间有孔的金片。无论白天和黑夜,都有一位僧侣负责移动这些金片。移动金片的规则是:一次只能将一片金片移动到另一根针上,并且在任何时候及任意一根针上,小片只能在大片的上面。当64个金片全部由最初的那根针移动到另一根针上时,这世界就在一声霹雳中消失。如何使用递归模拟次?

  • 算法:
    假设A,B,C表示3根针,目的是将A上的铜片全部移动到C。

    • 将A上的n-1根铜片借助C全部移动到B
    • 将A上的最后一个铜片移动到C
    • 将B上的n-1根铜片借助A移动到C
  • 程序实现:

    {	public static void main(String args[])
    {
    	hanoi(3,'A','B','C');
    }
    static void move(char a,char c) 
    {
    	System.out.println("from "+a+" to "+c);
    }
    static void hanoi(int n,char a,char b,char c)
    {
    	if(n==1) move(a,c);
    	else 
    	{
    		hanoi(n-1,a,c,b);
    		move(a,c);
    		hanoi(n-1,b,a,c);
    	}
    }
    }
    
	
* 运行结果:
	>from A to C
	from A to B
	from C to B
    from A to C
    from B to A
    from B to C
    from A to C

+ 当有n铜片,需要执行 2^n-1步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值