On-line: гостей 1. Всего: 1 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 04.08.18 17:24. Заголовок: Рекурсивная функция по определению: является ли сумма цифр числа четной или нечетной.


Встретил на 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


Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 36
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет