递归
递归简介:
- 普通的方法:A方法调用B方法。(是不是很容易理解?)
然而↓
- 递归:A方法调用A方法,唉,我自己调用自己。(是不是有点蒙了?)
- 递归作用:利用递归可以用简单的程序来解决一些复杂的问题。通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略之需少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量。递归的能力在与有限的语句来定义对象的无限集合。
- 递归的结构:
- 递归头:什么时候不掉用自身方法。(如果没有递归头,程序将陷入死循环)
- 递归体:什么时候需要调用自身方法。
递归的实际应用举例:
肯定会疑惑了,递归究竟有什么用呢?自己调用自己难道是为了好玩?闲的**?当然不是了,在上面简介中就说道递归可以用简单的程序来解决一些复杂的问题。就比如,我们可以求一个数的阶乘↓↓↓
我们不用递归就会麻烦很多,如下图↓↓↓
这个···不具代表性。
当然除了阶乘我们的递归还是大有用处的↓↓↓
练习:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?题目出处点这里
我们简化一下:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?
分析:由“经过了七个村子后还剩两只鸭子”可以得出到第八个村子时还剩2只鸭子。可以得出f(8)=2;而在第七个村子时鸭子的数量为f(7)=2*2+1;第六个村子时,鸭子数量为f(6)=f(7)*2+2.以此类推。
上代码:↓↓↓(这可是我自己解得哦,不信你可以去看看原文章,因为我们只涉及到递归,所以···)
我们可以得出:这个人出发时赶510只鸭子。
然后···我思考了一下,写出了以下代码↓
再一看输出结果QAQ
我哭了,算了找不出什么可以用递归简化的东西了,也别为难我了,我也只是个初学者啊!!!!
算了,直接进行原理讲解吧QWQ
递归原理讲解(图)
就以阶乘为例吧:
自己琢磨琢磨,会懂的。