【发布时间】:2023-10-30 12:34:01
【问题描述】:
你好,我必须实现一个递归函数,输入一个列表的头部,将每个节点的和之后的所有节点相加。 (如果列表是 1->2->3,则它必须变为 6->5->3)然后将所有节点相加,例如变量k 变为 6+5+3 所以k=14。我无法实现它,你能告诉我我该怎么做吗?
谢谢
#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 ;
}
【问题讨论】:
标签: c99