Hanoi问题——解惑自己

4 篇文章 0 订阅
1 篇文章 0 订阅

从第一个学期开始就有遇到汉诺塔的问题,但只是为了完成作业所以上网随便了一些代码而已,并没有真正理解。

今天又一次遇到了这个问题…想着还是解决一下比较好。
参考了这篇文章:参考文章
(作者未注明,若侵 删)

递归问题

以前一直认为递归问题很令人头疼,无从下手。但其实今天仔细研究过后发现递归的关键是关注即时问题以及单位问题(自己乱取的名字)。能递归解决的问题基本上能分解成为多个模式相同的单位问题。
例如在Hanoi中将n-1个圆盘放到中间柱上。

代码

这次是用java写的还是贴一下吧。


public static void main(String[] args) {

Lab1_4_Hanoi h = new Lab1_4_Hanoi();
    //move函数的 功能 即是将4个从A经由B移动到C,不用再追究细节。
    h.move(4, 'A', 'B', 'C');
}

//函数move定义
    public void move(int n, char a, char b, char c){
        if(n == 1){
            System.out.println("把"+n+"从"+a+"移动到"+c);
        }
        else{
            //此处调用,目的是将n-1个从A经由C移动到B(中间柱),无需追究细节
            move(n-1, a, c, b);         
            System.out.println("把"+n+"从"+a+"移动到"+c);
            //再将n-1个从中间柱上挪到目标柱上
            move(n-1, b, a, c);
        }   
    }
}

我以前一直纠结于为何move(n-1, b, a, c);这种在递归函数中本身被调用的用途一直令我纠结。但其实只需明白其功能,抓住功能即抓住了要点,这样再追踪细节便容易得多了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值