我可以使用递归或循环计算阶乘,如下所示?
递归因子
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;
}
}
两者在性能方面有什么区别?还有什么区别?
答案 0 :(得分:0)
性能智能循环更快,更安全。当您调用递归方法时,它始终作为方法调用执行。因此它在堆栈上分配内存。如果无限调用递归方法,则可能导致堆栈溢出异常。当你使用循环时,内存分配在堆中发生,因为它的性能明智而且更安全。
答案 1 :(得分:0)
您将使用递归版本支付高额罚款,因为除了调用的开销之外,您还会反复比较n
与<0
,==0
和{{1}的值这在循环版本中是不必要的。
稍微更有效的递归版本可能是:
==1
来自
int F(int n)
return n < 3 ? n : n * F(n-1)