#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int age;
float weight;
} person;
/*
Recursive function that:
1. Inputs data
2. Updates running totals
So we only traverse the array ONE time.
*/
void process_people(person *p[], int i, int n, int *sum_age, float *sum_weight)
{
// Base case: all people processed
if (i == n)
return;
// Allocate memory for this person
p
[i
] = (person
*)malloc(sizeof(person
));
printf("Enter age of person %d: ", i
+ 1);
printf("Enter weight of person %d: ", i
+ 1); scanf("%f", &p
[i
]->weight
);
// Update running totals
*sum_age += p[i]->age;
*sum_weight += p[i]->weight;
// Recursive call for next person
process_people(p, i + 1, n, sum_age, sum_weight);
}
/*
Recursive function to free allocated memory
*/
void free_people(person *p[], int i, int n)
{
if (i == n)
return;
free_people(p, i + 1, n);
}
int main()
{
int n;
printf("Enter the number of people: ");
person *p[n];
int sum_age = 0;
float sum_weight = 0;
// One recursion handles both input and sum
process_people(p, 0, n, &sum_age, &sum_weight);
printf("\n------ Results ------\n"); printf("Total Age = %d\n", sum_age
); printf("Total Weight = %.2f\n", sum_weight
);
printf("Average Age = %.2f\n", (float)sum_age
/ n
); printf("Average Weight = %.2f\n", sum_weight
/ n
);
// Free allocated memory
free_people(p, 0, n);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0CnsKICAgIGludCBhZ2U7CiAgICBmbG9hdCB3ZWlnaHQ7Cn0gcGVyc29uOwoKLyoKUmVjdXJzaXZlIGZ1bmN0aW9uIHRoYXQ6CjEuIElucHV0cyBkYXRhCjIuIFVwZGF0ZXMgcnVubmluZyB0b3RhbHMKClNvIHdlIG9ubHkgdHJhdmVyc2UgdGhlIGFycmF5IE9ORSB0aW1lLgoqLwp2b2lkIHByb2Nlc3NfcGVvcGxlKHBlcnNvbiAqcFtdLCBpbnQgaSwgaW50IG4sIGludCAqc3VtX2FnZSwgZmxvYXQgKnN1bV93ZWlnaHQpCnsKICAgIC8vIEJhc2UgY2FzZTogYWxsIHBlb3BsZSBwcm9jZXNzZWQKICAgIGlmIChpID09IG4pCiAgICAgICAgcmV0dXJuOwoKICAgIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhpcyBwZXJzb24KICAgIHBbaV0gPSAocGVyc29uKiltYWxsb2Moc2l6ZW9mKHBlcnNvbikpOwoKICAgIHByaW50ZigiRW50ZXIgYWdlIG9mIHBlcnNvbiAlZDogIiwgaSArIDEpOwogICAgc2NhbmYoIiVkIiwgJnBbaV0tPmFnZSk7CgogICAgcHJpbnRmKCJFbnRlciB3ZWlnaHQgb2YgcGVyc29uICVkOiAiLCBpICsgMSk7CiAgICBzY2FuZigiJWYiLCAmcFtpXS0+d2VpZ2h0KTsKCiAgICAvLyBVcGRhdGUgcnVubmluZyB0b3RhbHMKICAgICpzdW1fYWdlICs9IHBbaV0tPmFnZTsKICAgICpzdW1fd2VpZ2h0ICs9IHBbaV0tPndlaWdodDsKCiAgICAvLyBSZWN1cnNpdmUgY2FsbCBmb3IgbmV4dCBwZXJzb24KICAgIHByb2Nlc3NfcGVvcGxlKHAsIGkgKyAxLCBuLCBzdW1fYWdlLCBzdW1fd2VpZ2h0KTsKfQoKLyoKUmVjdXJzaXZlIGZ1bmN0aW9uIHRvIGZyZWUgYWxsb2NhdGVkIG1lbW9yeQoqLwp2b2lkIGZyZWVfcGVvcGxlKHBlcnNvbiAqcFtdLCBpbnQgaSwgaW50IG4pCnsKICAgIGlmIChpID09IG4pCiAgICAgICAgcmV0dXJuOwoKICAgIGZyZWUocFtpXSk7CgogICAgZnJlZV9wZW9wbGUocCwgaSArIDEsIG4pOwp9CgppbnQgbWFpbigpCnsKICAgIGludCBuOwoKICAgIHByaW50ZigiRW50ZXIgdGhlIG51bWJlciBvZiBwZW9wbGU6ICIpOwogICAgc2NhbmYoIiVkIiwgJm4pOwoKICAgIHBlcnNvbiAqcFtuXTsKCiAgICBpbnQgc3VtX2FnZSA9IDA7CiAgICBmbG9hdCBzdW1fd2VpZ2h0ID0gMDsKCiAgICAvLyBPbmUgcmVjdXJzaW9uIGhhbmRsZXMgYm90aCBpbnB1dCBhbmQgc3VtCiAgICBwcm9jZXNzX3Blb3BsZShwLCAwLCBuLCAmc3VtX2FnZSwgJnN1bV93ZWlnaHQpOwoKICAgIHByaW50ZigiXG4tLS0tLS0gUmVzdWx0cyAtLS0tLS1cbiIpOwogICAgcHJpbnRmKCJUb3RhbCBBZ2UgPSAlZFxuIiwgc3VtX2FnZSk7CiAgICBwcmludGYoIlRvdGFsIFdlaWdodCA9ICUuMmZcbiIsIHN1bV93ZWlnaHQpOwoKICAgIHByaW50ZigiQXZlcmFnZSBBZ2UgPSAlLjJmXG4iLCAoZmxvYXQpc3VtX2FnZSAvIG4pOwogICAgcHJpbnRmKCJBdmVyYWdlIFdlaWdodCA9ICUuMmZcbiIsIHN1bV93ZWlnaHQgLyBuKTsKCiAgICAvLyBGcmVlIGFsbG9jYXRlZCBtZW1vcnkKICAgIGZyZWVfcGVvcGxlKHAsIDAsIG4pOwoKICAgIHJldHVybiAwOwp9