最近有点忙,没有更新,今天我们继续学习c++
大纲
1.概念及归递定义
2.案例
3.总结
1.概念
递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。递归往往能给我们带来非常简洁非常直观的代码形势,从而使我们的编码大大简化,然而递归的思维确实和我们的常规思维相逆的,我们通常都是从上而下的思维问题, 而递归趋势从下往上的进行思维。这样我们就能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。
小贴士:
要求
(1) 是每次调用在规模上都有所缩小(通常是减半);
(2) 是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
(3) 是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
递归定义
递归定义是一种直接或者间接引用自身的定义方法。
递归包括两部分:
基础部分(直接形式列举)
递归部分(给出方法)
如 斐波那契数列的递归定义
{ f0 = 0, f1 = 1
{f(n) = f(n-1)+f(n-2) n>1
递归算法
使用递归定义的算法
如:
long Fib(long n) { if(n<=1){ return n; } else{ return (Fib(n-2) +Fib(n-1)); } }
但是递归的优点是简洁。缺点是耗时长(尤其是在递归次数多的时候)。
2.一些递归例子:
⛳⛳问题1 :逆序输出正整数的各位数⛳⛳
输入:
123456789输出:
987654321
分析