【发布时间】:2017-07-01 18:33:41
【问题描述】:
这是一个 java 代码,我应该在其中使用递归将链表的偶数相加。这是我想出的,但没有成功。我的 java 编译器在这个语句中进入了一个无限循环: ave(i.getNext());
public double ave (Node b)
{
Node i = head;
if (i == null)
return 0;
else
{
if (i.getData()%2==0)
{
sum = i.getData() + sum;
count++;
}
if (i.getNext() != null)
ave(i.getNext());
return sum/(double)count;
}
【问题讨论】:
-
你调用 i.getNext() 两次。这样你就失去了每一个第二个价值。一次存储在一个变量中,然后检查两次。
-
真正的问题是,对于递归函数,你通常需要两个函数,一个启动进程,一个递归。你的问题是'Node i = head;'总是从第一个元素开始,从而产生一个无限循环
-
@JayC667 这是一个链表,他没有将它们从数据结构中弹出。所以,这不应该是问题
-
@JayC667 明白了。不过,我确实因为从堆栈顶部弹出一个元素太多次而让自己有些头疼。需要注意的地方。
标签: java recursion linked-list