写算法题解法的博客时,时常想用递归或者迭代来描述解法,但又觉得这两个好像是一个意思。
那是因为我混淆了这两个概念,其有联系,也有区别。
递归
- 递归就是自己调用自己,但每次调用都会缩小解决问题的范围(体现在参数的变化)
- 递归必须有递归出口,及递归的终止条件。从终止条件处,再一步步回溯到最外层的调用,输出结果
- 递归的过程分两部分:从外层函数调用自己,这个过程是由外到内。碰到终止条件,由内层函数一步步return,这个过程由外到内。
迭代
- 递归的做法里一定包含迭代,但不能反过来说
- 怎么理解:正如前面将递归分为两个过程,因为
迭代不会自己调自己
,所以不存在由外到内的过程,只包含由内到外的过程。即,迭代会不停调另一个函数,直到求出结果。所以说,递归有迭代的思想,但迭代没有递归的过程。
- 怎么理解:正如前面将递归分为两个过程,因为
递归与迭代的代码示例
1 | //这是递归 |
- 递归没什么好说的,自己调自己,碰到终止条件,在迭代出结果
- 迭代的代码其实可以理解为funcB一直在循环里
调另一个函数{s+=i}
,并通过for循环控制迭代次数。类比递归,区别是递归里的迭代,调的是自己,由最外层调用的参数控制迭代次数