汉诺塔游戏

汉诺塔游戏

递归方法
找重复
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变成了辅助柱
 }
 

比较复杂,我也是想很久,大家有问题可以评论,或者私信我,一块学习,一块进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值