2010-09-09 72 views
0

我嘗試了許多編碼來解決問題,但也無法找到答案。任何人都可以幫我解決我的問題,並告訴我錯在哪裏編碼?編寫一個遞歸方法來計算鏈節點鏈中的節點數

/** Task: Recusively counts the nodes in a chain. 
* @param start the first node 
* @returns the number of nodes in the linked chain */ 
public int countNodes(Node start) 
{ 
if (start == null) 

// base case 

{ 
    countNodes (Node start); 

// recursive case 
else 

System.out.println (start.data); 
return start.next; 
} 
} // end countNodes 
+0

請告訴我們您到目前爲止嘗試過的方法,然後我們可以幫助您改進它。如果這是作業,請相應標記:-) – 2010-09-09 08:32:08

+0

這是一項家庭作業嗎? – 2010-09-09 08:32:14

+0

這是一項任務 – Tonberry 2010-09-09 08:35:42

回答

3

也許有助於這樣想:對於當前節點的節點數是1加上對其餘節點的計數結果。

0

在遞歸中,你不應該對下一個方程使用相同的參數,基本上,你應該做一些簡單的計算,在你的情況下添加一個,然後用參數的「下一個」值再次調用你的函數。顯然,爲了能夠使用遞歸來解決這個問題,應該有可能從當前節點移動到下一個節點。

1

允許創建名爲countNodes(Node node)

  1. 如果nodenull一個遞歸函數,這意味着不再有節點,以便計數= 0
  2. 否則有1個+ countNodes(node.next)

假設你有一個清單A-> B-> C-> D-> NULL

countNodes(NodeA) = 1 + countNodes(NodeB) 
countNodes(NodeA) = 1 + (1 + countNodes(NodeC)) 
countNodes(NodeA) = 1 + (1 + (1 + countNodes(NodeD))) 
countNodes(NodeA) = 1 + (1 + (1 + (1 + 0)))) 

所以,4是我們的答案。