汉诺塔的实现使用递归的要点是找到递归出口,问题描述如下:
有三个柱子,现在要求把在第一个柱子上的由上而下变大的盘子移到第三个柱子上,可以借助使用第二个柱子,但是要求大盘子不能在小盘子的下面。
这是比较经典的一个递归问题。
来分析一下:只有当第一个柱子上的盘子数为1时,才能直接放到第三个柱子上,这就需要把其他盘子先移到第二柱子上。 假设要挪动n个盘子,第一步是把n-1个盘子放到第二个柱子上,第二部把剩下的一个移到最后一个柱子上,之后把n-1个盘子移到最后一个柱子上。
以上是有三个盘子的整个移动过程,所以以此类推,不管有多少个,都可以先把n-1移到第二个柱子上,然后剩下的一个移到最后一个柱子。
所以源代码如下:
import java.lang.String;
public class Day0717 {
public static void main (String[] args){
int source=0;
int dest=2;
move(2,source,dest);
}
public static void move (int n,int source,int dest){
int other=3-source-dest;;
if(n==1)
{
System.out.printf("%d->%d%n",source,dest);
return;
}
{
move(n-1,source,other);
System.out.printf("%d->%d%n",source,dest);
move(n-1,other,dest);
}
}
}