递归
递归有“去”和“来”的过程,去的过程叫“递”,回来的过程叫“归”。
递归需要满足的三个条件:
- 一个问题的解可以分解为多个子问题的解(子问题就是数据规模更小的问题)
- 该问题与分解之后的子问题,除了数据规模不同之外,求解思路完全一样
- 存在递归终止条件
关于递归的逻辑思考,如果某个问题只有一个子问题(可理解为只有一条线路,我们可以可以很简单的画出“去”和“来”的过程,例如 f(1)=1;return f(n)=f(n-1)+1;),但是如果该问题有多个子问题(每一步有多条线路可以走,人为就不好画出“去”和“来”的过程,例如 f(1)=1;f(2)=2;return f(n)=f(n-1)+f(n-2)),所以编写递归的关键在于,只要遇到递归,我们就把他抽象成一个递推公式,而不是用人脑去分解递归的每个步骤(这句话很重要 读者切记 日后习题练多了自然身有体会!!!)。
一般递归代码的模板套用:
def recursion(level,param1,param2,...){
//1.最开始写初递归终止条件
if(level>Max_value){
print_level;
return;
}
//2.这一层的执行函数
process_data(level,data);