Как сделать рекурсивную функцию, которая находит сумму нечетных элементов динамического массива на C?

Для решения задачи нам понадобится рекурсивная функция, которая будет проходить через каждый элемент массива и суммировать только нечетные элементы. Для начала, создадим прототип данной функции:

int sum_odd_elements(int* array, int size);

Функция принимает указатель на массив array и его размер size. Возвратное значение функции - сумма нечетных элементов массива.

Далее, опишем саму рекурсивную функцию:

int sum_odd_elements(int* array, int size)
{
    // Базовый случай:
    // Если размер массива равен 0, возвращаем 0
    if (size == 0) {
        return 0;
    }
    
    // Рекурсивный случай:
    // Если первый элемент массива нечетный, возвращаем его сумму с остальными элементами
    if (array[0] % 2 != 0) {
        return array[0] + sum_odd_elements(array + 1, size - 1);
    }
    // Если первый элемент массива четный, возвращаем сумму остальных элементов
    else {
        return sum_odd_elements(array + 1, size - 1);
    }
}

Вначале функция проверяет базовый случай - если размер массива равен 0, возвращаем 0.

Дальше, она проверяет условие для первого элемента массива. Если он нечетный, возвращаем его значение плюс рекурсивный вызов функции для оставшейся части массива (array + 1) и уменьшенного размера массива (size - 1). Иначе, если первый элемент четный, возвращаем только рекурсивный вызов функции для оставшейся части массива и уменьшенного размера.

Теперь можно протестировать рекурсивную функцию:

#include <stdio.h>

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    
    int sum = sum_odd_elements(arr, size);
    
    printf("Сумма нечетных элементов массива: %d", sum);
    
    return 0;
}

Вывод программы будет следующим:

Сумма нечетных элементов массива: 9

В данном примере, функция sum_odd_elements будет последовательно проходить по элементам массива и находить сумму нечетных элементов (1 + 3 + 5 = 9).