数据结构与算法之递归之汉诺塔问题

这篇博客介绍了如何使用递归算法解决经典的汉诺塔问题。通过将飞碟从柱子A移动到柱子C,遵循不能将大飞碟置于小飞碟之上的规则,作者展示了详细的步骤和代码实现。递归函数`move`通过移动N-1个飞碟到临时柱子,然后移动N号飞碟能直接到达目标柱子,最后再次移动N-1个飞碟完成整个过程。
摘要由CSDN通过智能技术生成

/*
 * 递归之汉诺塔问题
 * 汉诺塔问题是有三个柱子,分别是A,B,C然后有N个飞碟在柱子A上,需要将A的飞碟全部移动到C上,并且A柱子上的飞碟从高到低依次变大,
 * 移动的过程中,大的飞碟不能放在小的飞碟的上面。
 * 
 * 问题的解题思路:首先有N个飞碟,想要把A柱子中的飞碟移动到C上,那么必须先将N-1个飞碟先移动到B上,然后在把N-1个飞碟由B移动到A上
 * 由此可以得到数学公式f(N) = f(N-1) + 1 + f(N-1); (N>1)  第一个是f(N-1)是将飞碟由A->B的过程,1是将N号飞碟由A移动到C
 * 第二个f(N-1)表示将飞碟由B->C的过程
 * 
 * 代码示例如下
 */
public class RecursionHanoiOfTower {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        move(3, "A","C","B");
    }
    
    private static void move(int n, String from, String to, String temp){
        if(n==1){
            System.out.println("把"+n+"号飞碟从:"+from+"移动到:"+to);
        }else{
            move(n-1, from, temp, to);
            System.out.println("把"+n+"号飞碟从:"+from+"移动到:"+to);
            move(n-1, temp, to, from);
        }
    }

}
 

//执行结果如下:

把1号飞碟从:A移动到:C
把2号飞碟从:A移动到:B
把1号飞碟从:C移动到:B
把3号飞碟从:A移动到:C
把1号飞碟从:B移动到:A
把2号飞碟从:B移动到:C
把1号飞碟从:A移动到:C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值