汉诺塔递归问题需要理解其真正含义,就是需要整体去看待
它的宏观简易模型只分两种。
- 第一种:一个圆盘移动A→C
- 第二种:两个圆盘 ①A→B ②A→C ③B→C
那么如果有n个圆盘,我们可以将上面的n-1个看成一个整体。就是执行的第二种情况。
package com.zhebie.test;
public class Hanoi {
public static void main(String[] args) {
int n=3; //圆盘数
f(n,"A","B","C"); //调用f()函数
}
/*定义f()函数
*汉诺塔简易模型只分两种情况 1.只有一个圆盘 2.只有两个圆盘
*/
private static void f(int n,String x,String y,String z) {
if(n==1) { //当只有一个圆盘的时候,打印A→C
System.out.println(x+"→"+z);
return;
}
/*当有n个圆盘的时候,将上部分n-1个圆盘看成一个整体
* 整体移动只需要三步
* 第一步:A→B
* 第二步:A→C
* 第三步:B→C
* 下面三条语句就是对应这三步
*/
f(n-1,x,z,y);
f(1,x,y,z);
f(n-1,y,x,z);
}
}