递归算法

一个简单的递归算法,逻辑是很清晰了,例子是网上找的,怕新人看不懂,加了点注释。

public class Main {

public static void main(String[] args){
    int i=3;
    char a ='A',b='B',c='C';
    cdt(i,a,b,c);
}

/**
 * 层叠塔
 */
public static void cdt(int n,char a,char b,char c){
    System.out.println(n + " 入口");
    if(n==1)
        System.out.println("移动"+n+"号盘子从"+a+"到"+c + "   n=1的轮询");
    else{
        //把上面n-1个盘子从a借助b搬到c  入口1
        cdt(n-1,a,c,b);
        System.out.println(n + " 第一轮通过");
        System.out.println("移动"+n+"号盘子从"+a+"到"+c + "   n!=1的轮询");
        //紧接着直接把n搬动c,再把b上的n-1个盘子借助a搬到c  入口2
        cdt(n-1,b,a,c);
        System.out.println(n + " 结束");
    }
}

}

执行结果
3 入口 第一次进入层叠塔方法
2 入口 从入口1进入层叠塔方法,主任务进入等待,开启次任务
1 入口 从入口1再次进入层叠塔方法,
移动1号盘子从A到C n=1的轮询 第一轮顺利结束
2 第一轮通过 次任务通过第一轮
移动2号盘子从A到B n!=1的轮询
1 入口 从入口2进入层叠塔方法
移动1号盘子从C到B n=1的轮询 满足条件后跳出,继续执行次任务
2 结束 次任务结束,主任务开始继续执行
3 第一轮通过 主任务通过第一轮
移动3号盘子从A到C n!=1的轮询
2 入口 主任务从入口2再次进入层叠塔方法,再次开启次任务
1 入口 次任务开始进入
移动1号盘子从B到A n=1的轮询 第一轮顺利结束
2 第一轮通过 次任务通过第一轮
移动2号盘子从B到C n!=1的轮询
1 入口 从入口2进入层叠塔方法
移动1号盘子从A到C n=1的轮询 满足条件后跳出,继续执行次任务
2 结束 次任务结束,主任务继续执行
3 结束 主任务结束

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 计算机科学的新学生通常难以理解递归程序设计的概念。递归思想之所以困难,原因在于它非常像是循环推理(circular...
    启明_b56f阅读 12,141评论 0 20
  • 每章一点正能量:人的一生可能燃烧也可能腐朽。 前言 相信大家在面试或者工作中偶尔会遇到递归算法的提问或者编程,我们...
    Coder编程阅读 5,299评论 0 2
  • 原文链接(转载请注明出处)汉诺塔的图解递归算法 起源 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大...
    Dmego阅读 5,472评论 0 0
  • 之前分享了一篇随机算法,这次再把以前写的递归算法的文章梳理一下,这篇文章主要是受到宋劲松老师写的《Linux C编...
    __七把刀__阅读 14,063评论 3 27
  • 首先考虑问题 要将盘子从A移动到C可以分成三步 1.将N-1号盘子移动到中转柱B上 2.将N号盘子移送到C上 3....
    阿两sama阅读 4,282评论 0 0