gpt4 book ai didi

java - return语句在递归函数调用中有不同的作用吗?

转载 作者:行者123 更新时间:2023-11-29 07:04:31 25 4
gpt4 key购买 nike

我对函数中的 return 语句的理解是,return 之后函数就结束了。但这是错误的,因为我试图理解递归函数的流程:

 public class Recursions {
int recursions(int i){
if(i==1){
System.out.println(i);
return 1;
}
else{
int j=(i*recursions(i-1));
System.out.println(j);
return j;
}
}
public static void main(String[] args) {

Recursions r=new Recursions();
r.recursions(4);
}
}

输出是:

1
2
6
24

但根据我的理解应该是:1我无法理解输出,因为它建议在 return 语句后递归时指针转到上一个调用?提前致谢

最佳答案

区分方法(源代码中的东西)和方法调用(在运行时执行该方法)很重要。 return语句结束当前方法调用。

也就是说,一个方法调用表达式(比如recursions(i-1))被计算

  1. 留出一点内存来保存这个方法调用的数据(比如方法参数和局部变量的值)。对于技术头脑来说,这个内存区域称为栈帧,是当前线程栈的一部分)
  2. 评估参数表达式,并将它们的值分配给方法参数
  3. 执行方法体(直到我们到达方法体的末尾或返回语句。在后一种情况下,将返回值保留在某处)
  4. 释放为方法调用预留的内存
  5. 方法调用表达式的值为第3步计算的返回值

所以每当执行到一个方法调用表达式时,一个新的方法调用就开始了。一旦该方法调用终止,将恢复原始方法调用的执行。

因此您的程序将按如下方式执行:

begin invocation of recursive with i = 4
begin invocation of recursive with i = 3
begin invocation of recursive with i = 2
begin invocation of recursive with i = 1
print 1
return 1
invocation ends with return value 1
j = 2 * 1
print j
return j
invocation ends with return value 2
j = 3 * 2
print j
return j
invocation ends with return value 6
j = 4 * 6
print j
return j
invocation ends with return value 24

关于java - return语句在递归函数调用中有不同的作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21349790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com