汉诺塔游戏
递归方法
找重复
1,找到一种划分方法
2,找到递推公式或者等价转化
都是父问题转化为求解子问题
找变化的量
变化的量通常作为参数
找到出口
根据参数变化的趋势,对边界进行控制,适时使用递归
将1-N从A移动到B,C作为辅助
等价于(自己可以画下这个只有2个移动情况)
1,1~N-1移动到c
2,把N从A移动到B
3,把1-N从C移动到B
代码如下
private static void solve(int n,String A,String B,String C ) {
if (n == 1) {
System.out.println("move" + n + "from" + A + "to" + B);//注意会发生变化,还有这里的作用有两个
//一个是递归最底层返回的,另一个是如果只有1层的情况,直接移动到目的柱即可。
return;//这里特别强调一点,递归里的return是逐级返回的
}
solve(n - 1, A, C, B);//把1~n-1移动到c盘
System.out.println("move" + n + "form" + A + "to" + B);//把n移动到B柱(目的柱)
solve(n - 1, C, B, A);//特别注意一点,这里ABC发生了,C变成原始柱,A变成了辅助柱
}
比较复杂,我也是想很久,大家有问题可以评论,或者私信我,一块学习,一块进步!!!