递归和使用for循环之间的区别?

时间:2014-03-05 17:43:40

标签: for-loop recursion

我可以使用递归或循环计算阶乘,如下所示?

递归因子

int recursiveFactorial(int n){
    if(n<0)
        return;
    if(n==0 || n==1)
        return 1;
    else
        return n*recursiveFactorial(n-1);
}

并使用for循环

int forFacotrial(int n){
    if(n<0)
        return;
    if(n==0 || n==1)
        return 1;
    else{
       int fact=1;
       for(int i=2;i<=n;i++)
       {
             fact=fact*i;
       }
       return fact;
    }
}

两者在性能方面有什么区别?还有什么区别?

2 个答案:

答案 0 :(得分:0)

性能智能循环更快,更安全。当您调用递归方法时,它始终作为方法调用执行。因此它在堆栈上分配内存。如果无限调用递归方法,则可能导致堆栈溢出异常。当你使用循环时,内存分配在堆中发生,因为它的性能明智而且更安全。

答案 1 :(得分:0)

您将使用递归版本支付高额罚款,因为除了调用的开销之外,您还会反复比较n<0==0和{{1}的值这在循环版本中是不必要的。

稍微更有效的递归版本可能是:

==1

来自

int F(int n)
return n < 3 ? n : n * F(n-1)