递归问题:
找重复:
1.找到一种分法
2.找到递推公式或者等价转换
都是父问题转换为子问题
找变化的量
变化的量通常作为参数
找到出口:
根据参数变化的趋势,对边界进行控制,适时终止递归
汉诺塔问题解决:
将1~N从A移动到B,C作为辅助
等价于:
1.1~N - 1从A移动到C,B为辅助
2.把N从A移动到 B
3.1~N-1从C移动到B,A为辅助
package 汉诺塔;
import java.util.Scanner;
public class 汉诺塔塔 {
/*
* N: 初始N个从小到大的盘子,N是最大编号
* from 原始柱子
* to 目标柱子
* help 辅助柱子
*/
public static void hannuota(int i,char from,char help,char to)
{
if(i == 1)
{
System.out.println(from + "->" + to);
return;
}
else
{
//先把前n-1个盘子搬到辅助空间去
hannuota(i - 1,from,to,help);
//第n可以顺利到达目标
System.out.println(from+"----->"+to);
//让前n-1个从辅助空间到目标空间上
hannuota(i - 1,help,from,to);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
hannuota(3,'a','b','c');
}
}