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這回答了我的問題的很大一部分,謝謝 –