我今天參加了一次考試,並且有一個問題,我不記得確切的代碼。Java初學者問題:一個方法可以自己調用嗎?
但我記得在method exampleMethod(int num)
裏面有一行在方法內調用方法本身。
我想知道一個方法可以自己調用嗎?因爲這是一個多項選擇問題,他們希望我們找到輸出。
我希望我的問題很清楚。
謝謝SOF :)
我今天參加了一次考試,並且有一個問題,我不記得確切的代碼。Java初學者問題:一個方法可以自己調用嗎?
但我記得在method exampleMethod(int num)
裏面有一行在方法內調用方法本身。
我想知道一個方法可以自己調用嗎?因爲這是一個多項選擇問題,他們希望我們找到輸出。
我希望我的問題很清楚。
謝謝SOF :)
當然可以。當你這樣做時,它被稱爲遞歸。要小心你有退出條件,否則你會得到堆棧溢出。
例如
int iAmRecursive(int num) {
if (num > 10) // break out at some condition; i.e. don't recurse
return num; // return so the recursion doesn't continue
iAmRecursive(num + 1); // I didn't break out, so continue to recurse.
}
編輯 - 這裏是相同的例子,但有不同的突破了,恭維@特德的評論
int iAmRecursive(int num) {
if (num <= 10) // only continue under certain condition
iAmRecursive(num + 1);
// When I get here, I implicitly break out by not recursing.
}
但是我寧願永遠是爲顯式可能的,所以如果可能的話,我會像第一個例子那樣明確地突破。
嗯......代碼裏面沒有退出條件。我努力想記住這個問題:S – 2011-06-12 14:58:32
+1使用「堆棧溢出」(以及正確的答案)。 – 2011-06-12 14:58:36
@ted,是啊,我無法抗拒;) – hvgotcodes 2011-06-12 14:59:52
遞歸的一個很好的例子是計算階乘的方法。
public static long factorial(int i)
{
if (i == 1) return 1;
return factorial(i - 1) * i;
}
然後調用它只是像這樣:
long f = factorial(10); // equals 10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 (* 1)
「教師」?大多數人都知道這是「階乘」。 – 2011-06-12 15:48:48
我也很好奇:[搜索教師](http://jeff560.tripod.com/f.html)。 – Atreys 2011-06-12 16:15:50
糟糕。對不起,我是荷蘭人。它「師資」對我來說聽起來不錯。感謝您的注意。 – 2011-06-12 16:27:05
你爲什麼不寫一個小程序來嘗試一下你自己嗎?試驗是最好的學習方式。 – Jesper 2011-06-12 15:52:47