递归可以解决现实中的很多问题,但是同时它也是程序员的最大敌人。一不留神就会造成Stack OverFlow。
天下没有免费的午餐,你在享受简洁编码的同时也要当心栈溢出,这并不包括你前期煞费苦心的将一个Procedure抽象成Recursion所耗费的脑力J
但是有时候,使用Iteration 来代替Recursion也是个不错的主意。最重要的是你代码的空间复杂度大大减少。
比较经典的例子是Fibonacci数列问题。
如下是Recursion的解决方案:
long Fib(int n)
{
if(n == 0 || n == 1)
return 1;
else
return Fib(n-1) + Fib(n-2);
}
如下是Iteration的解决方案:
long Fib(int n)
{
long Parameter1 = 1;
long Parameter2 = 1;
long Sum = 1;
for(int i = 2; i <= n; i ++)
{
Sum = Parameter1 + Parameter2;
Parameter1 = Parameter2;
Parameter2 = Sum;
}
return Sum;
}
另一个是计算阶层 - n!
如下是Recursion的解决方案:
longint Calculate(int n)
{
if(n == 0 || n == 1)
return 1;
else
return n * Calculate(n - 1);
}
如下是Iteration的解决方案:
longint Calculate1(int n)
{
long Sum = 1;
for(int i = 2; i <=n ; i++)
{
Sum = Sum * i;
}
return Sum;
}
递归虽然简洁但可能导致Stack Overflow。通过使用迭代,可以降低代码的空间复杂度,例如在解决Fibonacci数列和计算阶乘问题时。本文展示了如何将递归转换为迭代的实例,以避免潜在的性能问题。
7886

被折叠的 条评论
为什么被折叠?



