如下图所示,在A 上有多个直径不同的圆盘,并且盘子中央都有一个懂以试它们刚好可以放到塔座上,所有的盘子起初在A上,这个问题的目标是将所有的盘子都从A移动到C上,每次只可以移动一个圆盘,并且任何一个盘子都不可以放在比自己小的盘子上。
package javal.util.test;
public class Towers {
static int nDisks = 3;
public static void move(int num,char A, char B,char C) {
if(num == 1) {
System.out.println("Disk 1 from "+A+" to" + C);
}
else
{
move(num-1,A,C,B); //A ---> B
System.out.println("Disk "+ num + "from " + A +" to " + C);
move(num-1,B,A,C); //B ---> C
}
}
public static void main(String[] args) {
move(nDisks,'A', 'B', 'C');
}
}
递归的其他例子:
package javal.util.test;
public class RecursionClass {
/**
* 乘方递归
* @param base
* @param pow
* @return
*/
public static long power(int base, int pow) {
if(1 == pow) return base;
if(pow % 2 == 0) {
return power(base, pow / 2) * power(base, pow /2);
}else {
return base * power(base, pow / 2) * power(base, pow /2);
}
}
/**
* 递归求数的阶乘
* @param base
* @return
*/
public static long factorial(int base) {
if(base <= 1) {
return 1;
}else {
return base * factorial(base-1);
}
}
public static void main(String[] args) {
//System.out.println(power(4,3));
System.out.println(factorial(3));
}
}