分治算法

一、 分治算法的基本步骤

分治算法在每一层递归上都有三个步骤
1.分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题。
2.解决:若子问题规模较小而容易被解决则直接解决,否则递归的解各个自问题。
3.合并:将各个子问题的解合并为原问题的解。

二、汉诺塔游戏的思路分析

1.如果只有一个盘,A->C
2.如果有n>=2,总是可以看作两个半盘,一个是最下面的盘,另一个是上面的盘。
1)先把最上面的盘A->B
2)把最下面的盘A->C
3)把B塔的所有盘从B->C

三、代码实现

public static void hanoiTower(int num, char a, char b, char c){
        // 如果只有一个盘
        if (num == 1){
            System.out.println("第1个盘从 "+a+"->"+c);
        }else {
            // 如果我们有n>=2情况,我们总是可以看做是两个盘1.最下边的一个盘 2.上边的所有盘
            // 1.先把最上面所有的盘A->B 移动过程中会利用到c
            hanoiTower(num- 1, a, c, b);
            // 2.把下边的盘A->C
            System.out.println("第"+num+"个盘从 "+a+"->"+c);
            // 3.把B塔的所有盘移动到C 移动过程中使用到a
            hanoiTower(num-1, b, a, c);
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://www.cnblogs.com/steven_oyj/archive/2010/05/22/174...
    麒麟楚庄王阅读 591评论 0 0
  • 五大常用算法之一:分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就...
    鲍陈飞阅读 1,251评论 0 4
  • http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741...
    RavenX阅读 469评论 0 1
  • 概述 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相...
    _羊羽_阅读 620评论 0 0
  • 车田村是婺源北部山区一个极普通的村子,我在自己的相册里没有找到车田村全貌的照片,下面这张是2017年秋天路过车田的...
    张若木阅读 2,135评论 4 15