数据结构和算法——递归算法
Posted gali
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构和算法——递归算法相关的知识,希望对你有一定的参考价值。
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.
以上是关于数据结构和算法——递归算法的主要内容,如果未能解决你的问题,请参考以下文章
C++代码 递归算法 n个数的全排列 (是任意的,可不连续) 要求: 提示输入数的个数n 然后提示输入这n个
按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。