[英]Java- difference between return vs no return in iterated list recurssion
我正在尝试使用递归和迭代器计算链表中符合条件(如果 x > num)的项目数。 当我使用return来自调用 function (如下所示)时,它会返回它经过的项目的计数,但不会通过列表 go 但是当我不使用return并且只会直接调用if(x > num) total = 1 + nodes.Greater(); else nodes.Greater();
if(x > num) total = 1 + nodes.Greater(); else nodes.Greater();
它遍历整个列表,但始终返回计数 0。
public static Integer nodesGreater(Node x, Integer num){
Integer total = 0;
for(Iterator<Integer> it = list.iterator(); it.hasNext();){
Integer x = it.next();
if(x > num) return 1 + nodesGreater(it.next(), num);
else return nodesGreater(it.next(), num);
}
return total;
}
例如:如果链表是1-3-8-10-12-15-20并且条件是它应该大于 8,它将返回 2 (10, 12) 而不是 4 (10, 12, 15 , 20)
你在这两种方式上都做错了。
任何一个:
递归是遍历项目列表的一种策略。 迭代器是另一个。 你正在尝试两者兼而有之。 因此,这是行不通的。
如果要递归,那么算法和所有递归算法一样:
所以,像:
if (x.next == null) return 1;
return 1 + nodesGreater(x);
或者,如果您想进行迭代,则只需遍历每个元素,找出您所在节点的答案,并将其与计数器变量合并:
int sum = 0;
for (int elem : elems) sum++;
return sum;
注意:它是int
,而不是Integer
。 Integer
'有效',但那是整数的 object 引用包装器,你不想要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.