【发布时间】:2014-03-02 18:22:36
【问题描述】:
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 所在的行由于m(i++, j) 中的i++ 被调用,变量 i 更改为 5。之后它将返回 5 作为 i 的值。
这显然是错误的,所以我在整个程序中为 i 的值添加了一些 out.prints,以查看值是如何变化的,它从 3 变为 9,并在方法 m 的开头使用 out.print(i);。在return i; 之前的out.print(i); 显示值开始从10 倒退到5,并且该方法被调用了7 次。这是如何工作的?
编辑:记录后,我能够想出一些逻辑,但我希望有人澄清它是正确的。
方法 m 以 3,8 开头。之后,它用 4,8 然后 5,8....直到 9,8 调用自身因为 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,这就是返回的值。它是否正确?如果是的话,最好有更深入的解释。
【问题讨论】:
-
1) 试试看。 2)用打印语句记录它。
-
有类似的问题,如stackoverflow.com/questions/16095176/…,可能会解释这种行为。
-
@zapl 这回答了我的大部分问题,谢谢
标签: java recursion methods call