在Java中,当我们反复调用递归函数时,局部变量只能获得一次或每次内存?

在Java中,当我们反复调用递归函数时,局部变量只能获得一次或每次内存?,java,variables,recursion,local,factorial,Java,Variables,Recursion,Local,Factorial,所以,若我调用事实(3),对于每个调用,结果变量将在堆栈中获得单独的内存 (如果这是一个愚蠢的问题,很抱歉,但我似乎无法理解这个概念。)是的。但在这种情况下,不需要使用变量: int fact(int n){ int result; if(n==1) return 1; result=fact(n-1)*n; return result; } 每次方法调用都会占用内存中的一些空间 如何在递归中为不同的函数调用分配内存 从main()调用任何函数时,都会在 那一堆

所以,若我调用事实(3),对于每个调用,结果变量将在堆栈中获得单独的内存


(如果这是一个愚蠢的问题,很抱歉,但我似乎无法理解这个概念。)

是的。但在这种情况下,不需要使用变量:

int fact(int n){
    int result;
    if(n==1) return 1;
    result=fact(n-1)*n;
    return result;
}
每次方法调用都会占用内存中的一些空间

如何在递归中为不同的函数调用分配内存

从main()调用任何函数时,都会在 那一堆。递归函数调用自身,即被调用函数的内存 函数被分配到分配给调用函数的内存之上,并且 为每个函数调用创建不同的局部变量副本。什么时候 当达到基本情况时,函数将其值返回给函数 由谁调用,内存被取消分配,进程继续


是。但在这种情况下,不需要使用变量:

int fact(int n){
    int result;
    if(n==1) return 1;
    result=fact(n-1)*n;
    return result;
}
每次方法调用都会占用内存中的一些空间

如何在递归中为不同的函数调用分配内存

从main()调用任何函数时,都会在 那一堆。递归函数调用自身,即被调用函数的内存 函数被分配到分配给调用函数的内存之上,并且 为每个函数调用创建不同的局部变量副本。什么时候 当达到基本情况时,函数将其值返回给函数 由谁调用,内存被取消分配,进程继续


中,递归方法与任何其他方法相同。每次调用递归方法时(无论是从另一个方法还是在其内部),它都会将其推入堆栈中的单独内存,然后在返回时弹出。递归方法与任何其他方法相同。每次调用递归方法时(无论是从另一个方法调用还是在其内部调用),它都会推入堆栈中的单独内存,然后在返回时弹出。

函数的每次调用在堆栈中都有自己的内存。否则,所有不同调用中的变量将共享相同的值。假设进行了3次调用,则int(result)占用4个字节,则4X3=结果变量占用12个字节。如果我写:int-fact(int-n){if(n==1)返回1;返回n*fact(n-1);}这是一个很好的选择吗?因为递归函数中没有额外的变量。在空间上下文中,这是一个很好的方法吗?我建议您检查
n==0
,因为
0!
被定义为
1
n<0
的阶乘是未定义的。除非使用递归使任务更容易,否则我会选择simpleE迭代。它更有效。甚至可以考虑函数中的以前的调用调用在堆栈中有它自己的内存。否则,所有不同调用中的变量将共享相同的值。这个帖子应该回答您的问题。假设如果有3个调用,那么INT(结果)取4个字节,然后4X3=12个字节被结果变量占用这是一个很好的选择吗?因为递归函数中没有额外的变量。在空间上下文中,这是一个很好的方法吗?我建议您检查
n==0
,因为
0!
被定义为
1
n<0
的阶乘是未定义的。除非使用递归使任务更容易,否则我会选择simpleE迭代。效率更高。甚至可以考虑以前的调用。