2010-09-09 93 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是我们的答案。