C, сумма нечетных элементов в заданном столбце c в рекурсивной функции - PullRequest
0 голосов
/ 03 мая 2020

Задача - проверить сумму нечетных чисел в 4-м и втором-последнем столбцах матрицы.

Это должна быть рекурсивная функция. В результате компиляции отображаются нечетные элементы, но возникают проблемы с вычислением суммы и подсчетом количества нечетных элементов в указанных столбцах c.

Также, когда число столбцов равно количеству строк, результат каждой функции равен 0.

int sumOfOdds(int n, int m, int i, int j, int a[][m], int sum) {
    if (i<n)
    {
        if ((a[i][j]%2) == 1) {
                printf("\nSUMThe odd element is: %i", a[i][j]);
                sum+=a[i][j];
                return sumOfOdds(n, m, i+1, j, a, sum);
        }
        else {
                ++i;
                return sum;
        }
    }
}


int counterOfOdds(int n, int m, int i, int j, int a[][m], int count) {
    if (i<n)
    {
        if ((a[i][j]%2) == 1) {
                printf("\nCOUNTThe odd element is: %i", a[i][j]);
                count++;
                return counterOfOdds(n, m, i+1, j, a, count);
        }
                else {
                ++i;
                return count;
        }
}
}

c1 = 0, c2 = 0; они счетчики; s1 = 0, s2 = 0; они сумма; Вот как выглядит вызов функций:

printf("\nThe sum of odd numbers is the 4th column is: %i", sumOfOdds(n, m, 0, 3, a, s1)); 
printf("\nThe number of odd elements in the 4th column is: %i", counterOfOdds(n, m, 0, 3, a, c1));
printf("\nThe sum of odd numbers is the second-to-last column is: %i", sumOfOdds(n, m, 0, preLast, a, s2));
printf("\nThe number of odd elements in the second-to-last column is: %i", counterOfOdds(n, m, 0, preLast, a, c2));

Буду благодарен за любые предложения, потому что я понимаю, что проблема заключается в теле операторов if-else в функциях, но я Мы испробовали каждое решение, о котором я думал, и оно не сработало.

1 Ответ

2 голосов
/ 03 мая 2020

Компилировать с предупреждениями:

warning: control reaches end of non-void function

Вам необходимо return также, когда i == n, и не добавлять, когда a[i][j] не является нечетным:

int sumOfOdds(int n, int m, int i, int j, int a[][m], int sum) {
    if (i < n) {
        if ((a[i][j] % 2) == 1) {
            sum += a[i][j];
        }
        return sumOfOdds(n, m, i + 1, j, a, sum);
    } else {
        return sum;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...