使用迭代代替递归

递归虽然简洁但可能导致Stack Overflow。通过使用迭代,可以降低代码的空间复杂度,例如在解决Fibonacci数列和计算阶乘问题时。本文展示了如何将递归转换为迭代的实例,以避免潜在的性能问题。
 
递归可以解决现实中的很多问题,但是同时它也是程序员的最大敌人。一不留神就会造成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;
}
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值