我有一个关于我编写的递归函数的问题。该函数应该返回列表中所有偶数条目的总和。下面给出了代码以及辅助重新计算方法。
public int sumEven() {
return sumEven(head);
}
private int sumEven(IntListNode n) {
int nodeNumber=1;
int count=0;
if(n==null){
return count;
}
else if(nodeNumber%2==0 && n.getNext()==null){
return n.getValue();
}
else if(nodeNumber%2!=0 && n.getNext()==null){
return 0;
}
else if(nodeNumber%2==0 &&(n.getNext()).getNext()==null){
return n.getValue();
}
else{
nodeNumber++;
if(nodeNumber%2==0){
count+=n.getValue();
return count+ sumEven(n.getNext());
}
else{
return count + sumEven(n.getNext());
}
}
}
我不确定是否可以使用nodeNumber并按照我在函数中完成的方式进行计数。每次调用sumEven时,不是nodeNumber,而是将计数设置回零。如果是这样,那么这种方法不可能正常工作吗?我怎样才能跟踪计数并增加nodeNumber呢?
非常感谢!!!
答案 0 :(得分:0)
你可以这样试试:
public static void main(String args[]) {
List<Integer> list = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8));
System.out.printf("Sum of %s is: %s\n", list, sumOfEvenNumbers(list.iterator()));
}
private static int sumOfEvenNumbers(Iterator<Integer> iterator) {
if (!iterator.hasNext()) return 0;
Integer value = iterator.next();
return sumOfEvenNumbers(iterator) + (value % 2 == 0 ? value : 0);
}
答案 1 :(得分:0)
以下是您可以完成的简单伪代码:
int findSum(nodeptr temp, int count, int sum)
{
if(temp==NULL) // this indicates end of list. Return the sum until now
return sum;
count++; //increment count:number of nodes encountered
if(count%2==0) //if it is even node, add the contents of the node
{
sum += temp->value;
}
return findSum(temp->next, count, sum); //recursively call the function on subsequent nodes
}
从主代码中调用该函数,如下所示
res = findsum(myList, 0, 0);
我遵循了C / C ++惯例。适当改变它 这很容易理解。关键的想法是将更新的值作为方法参数传递,而不是使用局部变量。