Рекурсия - это академическое c любопытство. В вычислениях в реальном мире вы хотите избежать этого как чумы. Я упоминаю об этом, потому что здесь есть ответ, который будет зависеть от рекурсии, чтобы гарантировать, что мы создаем только «две переменные». На самом деле это не так, поскольку все переменные - это просто объекты стека, и мы злоупотребляем стеком, чтобы избежать создания переменных. В любом случае, с более новыми версиями C вы можете определять массивы стека, используя такую нотацию массива:
int array[count];
И вы можете полностью избежать указателей таким образом. Итак, две «переменные» - это array
и count
, как показано ниже.
int main() {
// Initialize all variables to known values
int count = 0;
// Seed the random number generator
srand(time(NULL));
printf("Define the size of array A \n");
scanf("%d", &count);
// the size must be > 0
if (count < 1) {
printf("Invalid size\n");
} else {
int array[count];
printf("Generating %d random values...\n", count);
fill_array( array, count );
// Sum the array of values
sum_array( array, count );
printf("The sum of all the elements in the array=%d\n", sum);
}
}
Чтобы функция fill_array не использовала никакие переменные, мы будем использовать do-while l oop .
void fill_array(int *array, int size) {
do array[--size] = rand() % 1000;
while (size != -1);
}
Наконец, мы будем использовать рекурсию для получения нашей суммы, также без каких-либо новых переменных.
int sum_array(int* array, int size) {
if(!size) return 0;
else return sum_array(array, size - 1) + array[size - 1];
}