Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
1

Рекурсия: подсчет количества четных цифр числа (на С)

18.04.2011, 14:43. Показов 4095. Ответов 8
Метки нет (Все метки)

Написать рекурсивную функцию считывающую количество четных цифр числа.

Плохо понял рекурсию объясните на этом примере пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.04.2011, 14:43
Ответы с готовыми решениями:

Рекурсия: подсчет количества цифр натурального числа
Написать рекурсивную функцию вычисления количества цифр натурального числа.

Рекурсия: подсчет количества четных элементов в массиве
Написать рекурсивную функцию для подсчета количества четных элементов в массиве.

Рекурсия: подсчет количества цифр в данном тексте
во входном файле задан символьный текст, за которым следует точка. Описав подходящую рекурсивную...

Рекурсия: подсчет количества цифр в тексте файла
Напишите рекурсивную функцию без параметров, подсчитывающую количество цифр в тексте, заданном во...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
8
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
18.04.2011, 15:27 2
Эх, люблю я тернарный оператор)))

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
size_t count_even_digits(int);
 
int main(void)
{
    int number;
 
    printf("Enter number: ");
    scanf("%d", &number);
 
    printf("Count of even digits in number %d: %u\n", number, count_even_digits(number));
 
    return 0;
}
 
size_t count_even_digits(int number)
{
    return !number ? 0 : !(number & 1) + count_even_digits(number / 10);
}
2
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:33  [ТС] 3
Спасибо большое. А вы уверены что тут всё правильно:
C
1
return !number ? 0 : !(number & 1) + count_even_digits(number / 10);
?
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
18.04.2011, 15:36 4
Do6oDyH, а вы нет? Чем вызвана неуверенность?
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:40  [ТС] 5
C
1
number ? 0
Что это значит?
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
18.04.2011, 15:48 6
Объясняю посимвольно:
?: - тернарный оператор. Если написано exp1 ? exp2 : exp3, это означает, что если exp1 истинно, то результатом операции будет exp2, в ином же случае exp3.
В данном случае: !number - проверка, не нулевое ли число. Если так - то достигнута база рекурсии, результатом будет 0. Если нет, то надо к итоговой сумме (которая получается в результате рекурсивных вызовов count_even_digits) прибавить 0 или 1, в зависимости от того, является ли очередная просматриваемая цифра числа (в данном случае - последняя) чётной или нечётной. number & 1 - проверка на чётность (младший разряд нечётного числа 1, чётного 0). Поскольку младший разряд последней цифры числа совпадает с младшим разрядом всего числа, нет смысла вычленять последнюю цифру через остаток от деления на 10, можно сразу проверить всё число. Так вот, если число у нас чётное, то мы к итоговой сумме (которая, повторюсь, получается неявно в последовательных рекурсивных вызовах) должны прибавить 1, иначе 0 (результат, инверсный результат проверки на чётность), а затем рекурсивно вызвать нашу функцию, но для числа без последней цифры (которую мы только что проверили и включили в результат).
В итоге результат можно расписать в виде суммы нулей и единиц, общее количество слагаемых равно количеству цифр числа, и на каждой позиции, где в числе стоит нечётная цифра, в сумме будет стоять 0, а где чётная - 1. Т.е. примерно так
Код
1   2   4   3   5   6   2   7
0 + 1 + 1 + 0 + 0 + 1 + 1 + 0
0
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:49  [ТС] 7
А можно как-то по другому?
0
Эксперт С++
5042 / 3103 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
18.04.2011, 15:52 8
Эхх... Хотелось как лучше... Примитивизм в действии)))

C
1
2
3
4
5
6
7
8
9
10
11
12
size_t count_even_digits(int number)
{
    int term = 0;
 
    if (number == 0)
        return 0;
 
    if (number % 2 == 0)
        term = 1;
 
    return term + count_even_digits(number / 10);
}
1
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:54  [ТС] 9
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2011, 15:54

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Рекурсия: подсчет количества цифр в заданном натуральном числе
12Подсчитать количество цифр в заданном натуральном числе. Составить рекуррентную функцию.

Подсчет количества четных цифр в числе
Здравствуйте! Начал изучать PHP и столкнулся с проблемой. Необходимо организовать подсчет четных...

Подсчет количества четных и нечетных цифр в числе
написать программу подсчитывающую кол-во четных и нечетных цифр в числе

Рекурсия: подсчет количества всех делителей целого числа
Недавно начал изучать С++ и дали такое вот задание: Рекурсивно описать функцию divs(N) для...

Рекурсия: подсчет суммы нечетных цифр числа
Написать рекурсивную функцию высчитывающую сумму нечетных цифр числа на Си. Помогите пожалуйста!:(

Подсчет четных цифр числа
Составить программу подсчета числа четных цифр, используемых в записи N-значного числа М


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.