kan3k1k3n
@kan3k1k3n

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

есть код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int sumOfOdd(int* array, int n);

int main() {
    setlocale(0, "rus");
    int n;
    printf("введите размер массива: ");
    scanf_s("%d", &n);
    int* array = (int*)malloc(n * sizeof(int)); 
    for (int i = 0; i < n; i++) {
        printf("a[%d] = ", i);
        scanf_s("%d", &array[i]);
    }
    int sum = sumOfOdd(array, n);
    printf("сумма нечетных элементов массива: %d", sum);
    free(array); 
    return 0;
}

int sumOfOdd(int* array, int n) {
    if (n == 0) {
        return 0; 
    }
    else {
        int sum = sumOfOdd(array, n - 1);
        if (array[n - 1] % 2 != 0) {
            return sum += array[n - 1]; 
        }
        else {
            return sum;
        }
    }
}

иногда он считает неправильно.
например: размер массива = 4. элементы: a[0] = 1, a[1] = 2, a[2] = 3, a[3] = 4. программа выводит сумму = 4. хотя должно быть 6 (4+2=6).
в чем у меня ошибка?
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Ошибка в том, что вы проверяете на четность сами элементы, а не их индексы. Вы суммируете нечетные числа. Если надо каждое второе число брать, то проверяйте на четность n.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы