2010-11-06 58 views
1

這個問題令我困惑。我有一棵樹,我想寫一個方法來計算某個節點的孫子的數量(但不是偉大的子孫)。我不能使用循環,只能遞歸。所以問題是我將如何實施我的基本情況?我如何讓它停止?我想不出一種這樣做的方式......經過一定量的步驟後停止遞歸

+4

有趣的事實:一些語言只有遞歸;沒有循環。 – nmichaels 2010-11-06 21:04:09

+0

真的,哪些? – Snowman 2010-11-06 21:06:43

+0

@fprime:關於你的更新,我看不出這是如何工作的。你不會將任何東西傳遞給'countGrandChildren()'的遞歸調用。 – 2010-11-06 21:10:13

回答

6

有一個depth參數的遞歸方法,並將它之前加1自通話,即:

void myMethod(int depth) { 
    /* ... Do something ... */ 
    if (depth < maxDepth) { 
     child.myMethod(depth + 1); 
    } 
} 
+0

請參閱編輯.. – Snowman 2010-11-06 21:07:47

+2

maxDepth從哪裏來?深度達到0時,深度剩餘減少與每次調用減少不是更好嗎,停止。 – 2010-11-08 11:53:55

+0

@彼得:是的,會的! – 2010-11-08 12:45:29

2

將「遞歸深度」參數傳遞給遞歸函數,每次調用該函數時遞增一次。

當你達到你的限制,你停止遞歸。