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)返回的是什么。)被调用的方法有多少次?答案应分别为5和7。调用自己的方法..递归?
当我研究问题1时,我出来了5,但我做的方式是不正确的,因为该方法没有被调用7次,它只被调用两次。我这样做的方式是,我直接去了else语句,因为(i > j)
在开始时是错误的,并且此时再次调用方法m,因为这个时候我再次调用了(4, 8)
我认为它仍然是错误的,所以我回到了调用m的行和变量由于m(i++, j)
中的i++
,我改为5。之后,它将返回5为我的价值。
这显然是错误的,所以我在整个程序中为我的值添加了一些out.prints,看看值是如何变化的,它从方法m
开始的out.print(i);
从3变为9。在return i;
之前的out.print(i);
显示值开始从10向后倒5,并且该方法被称为7次。这个怎么用?
编辑:记录后,我能够想出一些逻辑,但我希望有人澄清它是正确的。
方法m在开始时用3,8调用。之后,它将自己调用4,8和5,8 ....直到9,8,其中if语句变为true并且方法返回0.它自己调用了6次,所以它开始向后或向下6次因为m(i ++,j)是post(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)用打印语句记录。 –
也有类似的问题,像http://stackoverflow.com/questions/16095176/post-incrementing-decrementing-in-recursive-method-calls-java可能解释行为。 – zapl
@zapl这回答了我的问题的很大一部分,谢谢 –