深入浅出递归和迭代的通用转换思想
一般来说,能用迭代的地方就不要用递归!理论上讲,所有的递归和迭代之间都能相互转换!
刷题碰到【一天一道LeetCode】#130. Surrounded Regions所以来总结一下递归和迭代。
(一)何为迭代?
首先我们来看下面这段简单的代码:
int sum(int n )
{
int sum =0;
for(int i = 1 ; i <= n;i++) sum+=n;//求解1~n的和
return sum;
}
从上述例子中,从1一直加到n,每一次的和都是在上一次的和上加上n,因此,我们不难理解,所谓迭代法(辗转法),就是一种不断用变量的旧值递推新值的过程。
迭代三大步骤:
- 确定迭代变量:确定一个直接或间接地不断由旧值推断新值的变量,如sum
- 建立迭代关系式:从变量的旧值推断到新值的公式,如f(n) = f(n-1)+n
- 对迭代过程进行控制:迭代不可能无限循环下去,需要对何时退出迭代进行控制!如i>n推出循环
(二)何为递归?
<