有三个柱子,分别为 from、buffer、to。需要将 from 上的圆盘全部移动到 to 上,并且要保证小圆盘始终在大圆盘上。
这是一个经典的递归问题,分为三步求解:
① 将 n-1 个圆盘从 from -> buffer
② 将 1 个圆盘从 from -> to
③ 将 n-1 个圆盘从 buffer -> to
/**
*
* 如果只有一个圆盘,那么只需要进行一次移动操作。
*
* 从上面的讨论可以知道,a(n) = 2 * a(n-1) + 1,显然 an = 2^n - 1,
*
* n个圆盘需要移动 2^n - 1 次。
*
*/
public class Hanoi {
public static void main(String[] args) {
move(3,"H1","H2","H3");
}
public static void move (int n ,String from, String buffer, String to) {
if (n==1) {
System.out.println("from " + from + " to " +to);
return;
}
move(n-1,from, to, buffer);
move(1,from,buffer,to);
move(n-1,buffer,from,to);
}
}
输出
from H1 to H3
from H1 to H2
from H3 to H2
from H1 to H3
from H2 to H1
from H2 to H3
from H1 to H3