Встретил на Stackoverflow интересный подход к реализации рекурсивной функции, определяющей: является ли сумма цифр числа четной или нечетной.
Simply recursive function misunderstanding Подход состоит в том, что на самом деле не надо вычислять сумму цифр числа.
Допустим есть число 12345. Если последняя цифра числа, в данном случае цифра 5, нечетная, то число без последней цифры 1234 должно иметь нечетную сумму цифр, чтобы исходное число имело четную сумму цифр.
Ниже в демонстрационной программе приведена рекурсивная функция.
#include <stdio.h>
int even_sum_of_digits( unsigned int n )
{
const unsigned int Base = 10;
return n < Base ? n % 2 == 0
: ( n % Base % 2 == 0 ? even_sum_of_digits( n / Base )
: !even_sum_of_digits( n / Base ) );
}
int main( void )
{
const unsigned int Base = 10;
for ( unsigned int i = 0, value = 1; i < 10; i++, value = Base * value + 1 )
{
printf( "%u: %d\n", value, even_sum_of_digits( value ) );
}
}
Вывод программы на консоль:
1: 0
11: 1
111: 0
1111: 1
11111: 0
111111: 1
1111111: 0
11111111: 1
111111111: 0
1111111111: 1