递归
定义: 程序调用自身的编程技巧称为递归( recursion)。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归的条件
1、符合递归的描述:需要解决的问题可以化为子问题求解,而子问题求解的方法与原问题相同,只是数量增大或减少。
2、递归的调用次数是有限的
3、必须有递归结束的时间
递归的过程
如何判断递归是否正确
1、当n =0,1时结果正确;
2、假设递归对于n是正确的,同时对于n+1也是正确的
图解
同时也是入栈和出栈的顺序图
递归算法的编程模型
在递去的过程中解决问题
function recursion(大规模){
if(end_codition){ //明确的递归终止条件
end; //简单情景
}else{//将问题转换为子问题的每一步,解决该步中剩余部分的问题
solve//递去
recursion(小规模) //递去到最深处后不断的归来
}
}
在归来的过程中解决问题
function recursion(大规模){
if(end_codition){ //明确的递归终止条件
end; //简单情景
}else{//先将问题全部描述展开,再由尽头“返回”依次解决每步中剩余部分的问题
recursion(小规模) //递去
solve//归来
}
}
效率问题
递归的效率要小于循环的效率