Как сделать рекурсивную функцию для списка связанных узлов - PullRequest
0 голосов
/ 12 февраля 2020

Привет! Мне нужно реализовать рекурсивную функцию, взятую на вход заголовка списка, суммировать для каждого узла все узлы, которые следуют после. (если список 1-> 2-> 3, он должен стать 6-> 5-> 3), а затем суммировать все узлы вместе, например, переменная k становится 6 + 5 + 3, поэтому k=14. Я не могу это реализовать, можете ли вы показать мне, как я могу это сделать? THX

#include <stdio.h>
#include <stdlib.h>

typedef struct node {
    int val;
    struct node *next;
} node_t;

void somma(node_t *head, int *sum);

int recursive(node_t *head, int *sum);

int main (){

    int max, i, sum=0, sum2=0;

    node_t *head = NULL;
    head = (node_t *)malloc(sizeof(node_t));
    node_t *temp = head;

    printf("Quanti valori vuoi inserire: \n");
    scanf("%d", &max);

    for (i=0; i < max; i++){
        temp->next = (node_t *)malloc(sizeof(node_t));
        printf("Inserisci il valore in posizione %d\n", i);
        scanf("%d", &temp->val);
        temp = temp->next;
        temp->next = NULL;
    }

    somma(head, &sum);

    printf("La somma e' %d\n", sum);

    recursive(head, &sum2);

    printf("La somma calcolata rec e': %d\n", sum2);

    return 0;
}

void somma(node_t *head, int *sum){

    node_t *curr = head;
    node_t *start = head;

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

    start = head;

    while (start->next != NULL){
        (*sum) += start->val;
        start = start->next;
    }

    return ;
}

1 Ответ

0 голосов
/ 12 февраля 2020

Они должны работать.

int sumList(LinkedList head) {
      if (head == null) return 0;
      int sum = head.value += sumList(head.next);
      return sum;
}

Как и в большинстве рекурсивных алгоритмов, определить конечное условие.

Затем рекурсивно и добавить кумулятивное значение к текущему значению и вернуть эту сумму.

...