汉诺塔递归算法

 public class HanoiTest { static int step = 0; /** * @param args */ public static void main(String[] args) { hanioSort(3, "A", "B", "C"); } /** * 递归函数,用来遍历hanoi步骤 */ public static void hanioSort(int num ,String a ,String b ,String c){ if(num == 1){ move(num,a,c); } else{ hanioSort(num-1, a, c, b); move(num,a,c); hanioSort(num-1, b, a, c); } } public static void move(int num ,String a,String b){ step ++ ; System.out.println("第"+step+"步,盘子"+num+"从"+a+"塔移到"+b+"塔/n"); } }

 

解法

如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。 

 

如果盘数超过2个,将最后一个盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,

其实就是进入程序的递回处理。(进入下一次递归之后,柱的相对位置就变了

你可能感兴趣的:(经典算法)