For loop 递归和for循环之间的区别?

For loop 递归和for循环之间的区别?,for-loop,recursion,For Loop,Recursion,我可以使用递归或for循环计算阶乘,如下所示 递归阶乘 int recursiveFactorial(int n){ if(n<0) return; if(n==0 || n==1) return 1; else return n*recursiveFactorial(n-1); } int递归阶乘(int n){ 如果(n性能方面的循环更快,也更安全。当您调用递归方法时,它总是作为方法调用执行。因此,它会在堆栈上分

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

递归阶乘

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

如果(n性能方面的循环更快,也更安全。当您调用递归方法时,它总是作为方法调用执行。因此,它会在堆栈上分配内存。如果无限调用递归方法,可能会导致堆栈溢出异常。当您使用循环时,内存分配会在堆中进行,以确保其性能良好且更安全。使用递归版本,您将付出沉重的代价,因为除了调用的开销之外,您还会反复比较
n
的值和
的值。是的。你是对的。不同之处在于性能……是的,这很好。性能方面有差异吗?正如我所知,递归fa将有n个调用系数函数,循环次数也增加到n次,所以复杂度是O(n)对于这两种情况,递归解决方案在堆栈空间方面也很昂贵,因为它为每个嵌套调用分配空间。这里它与n成比例。一般来说,这是不可接受的。在这种特殊情况下,如果阶乘溢出n>=13的整数,那么它是无害的。[顺便说一句,将14个值制成表格将是最好的解决方案。]
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;
    }
}
int F(int n)
return n < 3 ? n : n * F(n-1)
int G(int n)
return n < 2 ? 1 : F(n)