对每个节点递归求和它之后的所有节点

Sum recursively to each node all the nodes that come after it

你好,我需要做一个递归函数,它接受输入列表的头部并将每个节点和该节点之后的所有节点相加。例如,如果列表是 1->2->3,则列表将在 6->5->3 中修改。我已经完成了一个很好用的迭代函数,但我不知道递归函数是怎么做的,你能帮忙吗? 这是迭代的:

int modify(node *head){

    node **curr;
    node *track = head;
    int i;

    while (track->next != NULL){
        *curr = (track)->next;
        while((*curr)->next != NULL){
            track->val += (*curr)->val;
            *curr = (*curr)->next;
        }
        track = track->next;
    }

    track = head;

    while (track->next != NULL){
        printf("%d ",track->val);
        track = track->next;
    }

    printf("\n");

    return head->val;

}
int modify(node *head){
    if(!head) return 0;
    head->val = modify(head->next)+head->val;
    return head->val;
}

如果您也想打印这些值,则必须使用包装函数,因为递归以相反的顺序运行。

void wrapper(node* head){
    modify(head);
    while(head){
        cout<<head->val<<" ";
        head = head->next;
    }
}