链表的递归方法

时间:2014-04-09 10:40:40

标签: java recursion

我有一个关于我编写的递归函数的问题。该函数应该返回列表中所有偶数条目的总和。下面给出了代码以及辅助重新计算方法。

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呢?

非常感谢!!!

2 个答案:

答案 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 ++惯例。适当改变它 这很容易理解。关键的想法是将更新的值作为方法参数传递,而不是使用局部变量。