Рекурсивно суммируйте для каждого узла все узлы, следующие за ним - PullRequest
0 голосов
/ 13 февраля 2020

Привет, мне нужно сделать рекурсивную функцию, которая принимает на вход заголовок списка и суммирует для каждого узла все узлы, которые идут после этого узла. Пример, если список 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;

}

1 Ответ

0 голосов
/ 13 февраля 2020
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;
    }
}
...