Вывести результат сравнения сумм четных и нечетных чисел - C (СИ)
Формулировка задачи:
Написать и отладить программу, выполняющую задание. Подпрограмма должна быть рекурсивной. Запрещается работа с глобальными переменными. Используя рекурсивную функцию, составить программу определения величины, указанной в условии задачи. Во всех задачах данные содержатся в одномерных массивах, содержащих N чисел.
Задание: результат сравнения сумм четных и нечетных чисел.
Прошу помочь с данной задачей, с объяснением если не затруднит, буду бесконечно благодарен!
Решение задачи: «Вывести результат сравнения сумм четных и нечетных чисел»
textual
Листинг программы
#include <stdio.h>
int compare(int n, int arr[]) {
if (n < 0) /* если индекс меньше нуля заканчиваем */
return 0;
else
if ((arr[n] % 2)==0) /* если число чётное значит прибавляем */
return compare(n-1, arr) + arr[n];
else /* иначе отнимаем */
return compare(n-1, arr) - arr[n];
}
int main(void)
{
int n, i, result;
int arr[100] = {0};
printf("how many numbers? : ");
scanf("%i", &n); /* величина массива (N) */
puts("\nenter values");
for (i=0; i<n; i++) {
printf("%i = ", i+1);
scanf("%i%*c", &arr[i]);
} /* заполнение массива */
result = compare (n-1, arr); /* вызов рекурсивной ф-ции */
/* проверки на результат */
if (result == 0)
printf("the sums are equal\n");
else if (result > 0)
printf("the sum of even is greater\n");
else
printf("the sum of odd is greater\n");
return 0;
}
Объяснение кода листинга программы
- Программа на языке C.
- Задача программы - сравнение сумм четных и нечетных чисел в массиве.
- В начале программы объявляются две функции: compare(int n, int arr[]) и main().
- В функции main() происходит запрос на ввод количества чисел для массива и их значений.
- После ввода значений функция compare() вызывается с аргументами (n-1, arr), где n-1 - это размер массива, а arr - это сам массив.
- Функция compare() рекурсивная и выполняет следующие действия:
- Если индекс меньше нуля, то возвращает 0.
- Иначе проверяет число на четность: если число четное, то прибавляет его к результату, если нечетное - отнимает.
- Рекурсивно вызывает функцию compare() с аргументами (n-1, arr) до тех пор, пока не будет достигнут базовый случай (индекс меньше нуля).
- В функции main() после вызова функции compare() происходит проверка результата и выводится соответствующее сообщение.
- Результат выполнения программы зависит от введенных пользователем значений.