汉若塔问题

来源:互联网 发布:数据部分迁移方案 编辑:程序博客网 时间:2024/05/16 13:45

汉若塔问题:就是把A柱子上面从大到小一次叠放的盘子借助B柱移到C柱上去,规则是一次只能移动一个盘子,大盘子不能放到小盘子之上

采用递归的方法来接:(1) 先将A上面的n-1个盘子,移到B柱上

                                        (2) 然后把A上最大的一个盘子放到C上去

                                        (3) 然后把B上面的n-1个盘子移到A上去

 

汉若塔用递归思考首先考虑一种临界状态,把n-1个上面的盘从A—B, 就是把n从A移动到C,最后把n-1个盘从B---C,(注意在考虑把n-1个盘从B---C的时候就出现递归调用,如果把A,B盘交换就又重复上面的流程了,最后到n = 1的时候就返回)
代码实现
public void run(int n,char a,char b,char c)
{
       if(n==1)
       {
       move(n,a,c);//等于1的时候把盘从A移动到C
}
else
{
       run (n-1,a,b,c);//递归调用把a上面的n-1个盘移动到B上,怎么表示移动?把柱子//交换不就是移动了。
       move(n,a,c);
       run (n-1,b,a,c);//把把n-1个盘冲A移动到B上以后又重复前面的所有步骤,把n-1个盘冲当做启始柱子。所以把A和B柱子交换.
}
}