博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构和算法——递归算法
阅读量:6977 次
发布时间:2019-06-27

本文共 1117 字,大约阅读时间需要 3 分钟。

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+"\r\n");        }        else{            diGui(num-1,from,to,inter);            step++;            System.out.println("第 "+step+"步:把"+num+"从"+from+" 移动到  "+to+"\r\n");            diGui(num-1,inter,from,to);        }    }

 

 运算结果:

 

4.

转载于:https://www.cnblogs.com/galibujianbusana/p/6532803.html

你可能感兴趣的文章
throttle与debounce的区别
查看>>
iOS实现依赖注入
查看>>
Laravel应用
查看>>
Android5.1.1源码 - zygote fork出的子进程如何权限降级
查看>>
文本相似度的计算
查看>>
CSS哲学伪命题
查看>>
Coursera Machine Learning 作业提交问题
查看>>
jquery easy ui 简单字段选择搜索实现
查看>>
达观数据于敬:个性化推荐系统实践
查看>>
关于产品体验以及产品会被抄袭的思考
查看>>
Scala Learn 1 Basic
查看>>
老生常谈,joomla wordpress drupal,你该选择哪个CMS?
查看>>
Fedora 提出统一流程,弃用上千 Python 2 软件包更可控
查看>>
Java 社区领袖联合发文:别慌,Java 仍然是免费的!
查看>>
几个定制 iTerm2 的 tip
查看>>
杨老师课堂_Java核心技术下之控制台模拟记事本案例 ...
查看>>
好程序员分享24个canvas基础知识小结
查看>>
大数据处理也要安全--关于MaxCompute的安全科普
查看>>
Django使用数据库(Mariadb/Mysql)
查看>>
广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理
查看>>