Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Do6oDyH
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
#1

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

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

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

Плохо понял рекурсию объясните на этом примере пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2011, 14:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсия: подсчет количества четных цифр числа (на С) (C++):

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

Подсчет числа четных цифр, используемых в написании N-значного числа М (функции) - C++
Добрый день. помогите решить задачку пжалуйста. Заранее благодарен

Рекурсия: вычисление суммы и количества цифр числа, максимальной и минимальной его цифры - C++
Помогите, пожалуйста, разобраться и написать программу на С++. Условие такое: Для числа, введеного с клавиатуры, определить рекурсивные...

Рекурсия: подсчет суммы всех четных чисел от 2 до 15 - C++
Здравствуйте, нужна ваша помощь уважаемые! Никак не могу осилить.. Напишите рекурсивную функцию расчета суммы всех четных чисел от 2...

Рекурсия: вычисление количества четных элементов в целочисленном массиве - C++
Задание: Написать рекурсивную функцию вычисления количества четных элементов в целочисленном массиве {a} где i=1,2,3.......n Не могу...

Подсчет количества, суммы и произведения четных положительных элементов массива - C++
помогите пожалуйста! разработка программы для подсчета количества, суммы и произведения четных положительных элементов массива. на языке...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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
Do6oDyH
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
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
18.04.2011, 15:36 #4
Do6oDyH, а вы нет? Чем вызвана неуверенность?
0
Do6oDyH
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:40  [ТС] #5
C
1
number ? 0
Что это значит?
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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
Do6oDyH
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:49  [ТС] #7
А можно как-то по другому?
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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
Do6oDyH
0 / 0 / 0
Регистрация: 25.10.2010
Сообщений: 71
18.04.2011, 15:54  [ТС] #9
Спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2011, 15:54
Привет! Вот еще темы с ответами:

Подсчет количества цифр в строке - C++
typedef { int c, d; } Dec; Dec Add(Dec a, Dec b) { Dec r; int la, lb, pw, x; r.c = a.c + b.c; la = 0; x = a.d; ...

Подсчет количества цифр в тексте - C++
С клавиатуры вводится строка. Составить программу, которая подсчитывает количество цифр в тексте; выводит на экран слова, начинающиеся с...

Подсчет количества цифр в вещественном числе - C++
Насколько я понял, сделать это можно лишь с переводом в строковый тип, а вот сделать никак не могу. И да, вещественное число не вводится...

Подсчет количества цифр в текстовом файле - C++
написать программу,которая в текстовом файле,состоящем из строк не более 60 символов,находит количество цифр


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.04.2011, 15:54
Ответ Создать тему
Опции темы

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