zoukankan      html  css  js  c++  java
  • 数据结构和算法——递归算法

    1.递归方法的特征

      <1>调用自身

      <2>调用自身是为了解决更小的问题

      <3>存在某个足够简单的层次,在这一层不需要调用自身,直接计算,并返回结果。

    在递归每次调用自身的时候,参数是不断的变小,反应出问题是不断的简单化。当参数或范围足够小时,不需要调用自身,触发条件,直接返回。

    2.汉诺塔问题

    问题:把A上面的所有的盘子移动打C,{小盘子上面不能放大盘子}

    方法可以命名为move(num,A,B,C) num为盘子的总数,A是起始位,C是移动目的,B是中介

     思路:需要把最大的4 最先移动到C  123当成一个子体。即是吧子体移动到B,4移动到C,然后把子体移动到C

    步骤1:把子体从A通过中介C,移动到B

    方法可以表示为:move(num-1,A,C,B) 将子体通过中介C移动到B

    步骤2:将最大的从A移动到C  到这里4是最大的在目标C的最下面,已经可以当做这个4不存在,需要把子体在移动到目标C

    步骤3: 将子体从B通过中介A移动到目标C 这样问题就解决了;

    方法可以表示为:move(num-1,B,A,C) 把子体从B通过中介A移动到目标C。

    3.Java的算法实现

        /**
         * 汉诺塔 把num个数目的铁塔从a移动到c b为中介
         * @param num  num为总数,
         * @param from   从a开始
         * @param inter   b为中介
         * @param to  c为目标
         */
        
       int step=0; public void diGui(int num,String from,String inter,String to){ if(num==1){ step++; System.out.println(""+step+"步:把"+num+""+from+" 移动到 "+to+" "); } else{ diGui(num-1,from,to,inter); step++; System.out.println(""+step+"步:把"+num+""+from+" 移动到 "+to+" "); diGui(num-1,inter,from,to); } }

     运算结果:

    4.

    今天多一点积累,明天少一分烦恼
  • 相关阅读:
    repeater 结合checkbox批量删除
    (转)用JS判断ckeditor3.6版本编辑器内容为空的方法
    把数据库中的null作为条件查询应该用is
    注意 reader["yjID"] == DBNull.Value而不是null
    (转)第三方登录(QQ登录)开发流程详解
    (转)TortoiseSVN使用简介
    dropdownlist 二级联动
    关于服务器防火墙和discuz论坛的问题
    (转)Discuz!NT图文安装教程
    maven 基础
  • 原文地址:https://www.cnblogs.com/galibujianbusana/p/6532803.html
Copyright © 2011-2022 走看看