很明显,用递归写出来的代码十分的简洁,然而递归却有一个致命的缺陷,那就是它的时间复杂度是N的指数级,并且会消耗大量的内存,使用不当还会导致爆栈.
比如:
int func(int n){
if(n<=2) return n;
int x = func(n-1) + f(n-2);
return x;
}
如果将递归换成迭代呢?
int func(int n) {
if (n <= 2) return n;
int x = 1, y = 2, z = 0;
for (int i = 3; i <= n; i++) {
z = x + y;
x = y;
y = z;
}
return z;
}
代码明显多了,但是消耗的资源却少了,并且时间复杂度为O(N).
因此我觉得递归应该尽量用在计算量小且调用少的地方;而用在计算量大的地方,可能就会是个灾难.