gpt4 book ai didi

java - 方法调用自身..递归?

转载 作者:行者123 更新时间:2023-11-30 06:20:35 24 4
gpt4 key购买 nike

public static int m(int i, int j)    
{
if ( i > j)
return 0;
else
{
i++;
m(i++, j);
}
return i;
}

我有两个问题。 1.) out.print(m(3,8)); 返回了什么和 2.) 方法 m 被调用了多少次?答案应分别为 5 和 7。

当我做第1题时,我得出了5,但是我做的方式不对,因为这个方法没有被调用7次,它只被调用了两次。我这样做的方式是我直接进入 else 语句,因为 (i > j)一开始是假的,这次用 (4, 8) 再次调用方法 m我认为它仍然是错误的,所以我回到调用 m 的行并且由于 i++ 变量 i 更改为 5在 m(i++, j) .之后它将为 i 的值返回 5。

这显然是错误的,所以我在整个程序中为 i 的值添加了一些 out.prints 以查看值是如何变化的,它从 3 变为 9 并带有 out.print(i);。在方法的开头 m .一个out.print(i);就在return i;之前显示值开始从 10 倒退到 5,并且该方法被调用了 7 次。这是如何工作的?

编辑:记录后,我能够得出一些逻辑,但我希望有人澄清它是正确的。

方法 m 在开始时以 3,8 调用。之后,它调用自己 4,8 然后 5,8....直到 9,8 if 语句变为真并且方法返回 0。它调用自己 6 次所以它开始倒退或递减 6 次所以因为 m(i++, j) 是 post(i) 然后 i 变成 10 并返回 10,然后是 9,然后是 8,然后是 7、6,最后是 5。当它返回 10 即 1 时,9 是 2、8是 3,7 是 4,6 是 5,5 是 6。所以当 i = 5 时它是 6,这就是返回的值。它是否正确?如果是,最好有更深入的解释。

最佳答案

您看到值递减的原因是因为在您打印最后一个“i”之前,该值仅在本地范围内递增(您的 else 条件中的第一个 i++)。

当您的 m 函数返回给它的调用者时,i 不再像在子函数中那样是 i+1,因此您会看到递减的值,直到返回根“m”调用为止。

关于java - 方法调用自身..递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592186/

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