2011-06-12 44 views
1

我今天參加了一次考試,並且有一個問題,我不記得確切的代碼。Java初學者問題:一個方法可以自己調用嗎?

但我記得在method exampleMethod(int num)裏面有一行在方法內調用方法本身。

我想知道一個方法可以自己調用嗎?因爲這是一個多項選擇問題,他們希望我們找到輸出。

我希望我的問題很清楚。

謝謝SOF :)

+3

你爲什麼不寫一個小程序來嘗試一下你自己嗎?試驗是最好的學習方式。 – Jesper 2011-06-12 15:52:47

回答

14

當然可以。當你這樣做時,它被稱爲遞歸。要小心你有退出條件,否則你會得到堆棧溢出。

例如

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. 
} 

但是我寧願永遠是爲顯式可能的,所以如果可能的話,我會像第一個例子那樣明確地突破。

+0

嗯......代碼裏面沒有退出條件。我努力想記住這個問題:S – 2011-06-12 14:58:32

+3

+1使用「堆棧溢出」(以及正確的答案)。 – 2011-06-12 14:58:36

+2

@ted,是啊,我無法抗拒;) – hvgotcodes 2011-06-12 14:59:52

1

遞歸的一個很好的例子是計算階乘的方法。

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) 
+2

「教師」?大多數人都知道這是「階乘」。 – 2011-06-12 15:48:48

+0

我也很好奇:[搜索教師](http://jeff560.tripod.com/f.html)。 – Atreys 2011-06-12 16:15:50

+0

糟糕。對不起,我是荷蘭人。它「師資」對我來說聽起來不錯。感謝您的注意。 – 2011-06-12 16:27:05