@demchenkodenis

Посчитать нечетные цифры числа методом рекурсии?

Добрый день!
Помогите разобраться с рекурсией, застрял на вопросе Посчитать четные и нечетные цифры введенного натурального числа. Ниже мой код
def count_numb(n):
    even = odd = 0
    if n == 0:
        return print("четных - %d, нечетных - %d" % (even, odd))
    elif n % 2 == 0:
        even += 1
        n == n // 10
        return count_numb(n)
    else:
        odd += 1
        n == n // 10
        return count_numb(n)
    
n = int(input("Введите число: "))
count_numb(n)
  • Вопрос задан
  • 106 просмотров
Решения вопроса 2
@mikeyuriev
def count_even_odd(n):
    # на случай, если изначально n - отрицательное число
    n = abs(n)
    # если n чётное - последняя цифра тоже чётная
    result = (1, 0) if n % 2 == 0 else (0, 1)
    # если n сотоит из одной цифры - прерываем рекурсию
    if n < 10:
        return result
    # иначе - отрезаем от n последнюю цифру, 
    # вызываем функцию рекурсивно и суммируем результат
    return tuple(map(sum, zip(count_even_odd(n // 10), result)))
Ответ написан
@demchenkodenis Автор вопроса
Ребята, спасибо кто помогал! Ниже вывел код на котором остановился
def count_numb2(n, even=0, odd=0):
    if n == 0:
        print(f"Количество четных и нечетных цифр в числе равно: ({even}, {odd})")
    else:
        cur_n = n % 10
        n = n // 10
        if cur_n % 2 == 0:
            even += 1
        else:
            odd += 1
        return count_numb2(n, even, odd)

n = int(input("Введите число: "))
count_numb2(n)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Vindicar
#even и odd - счётчики чётных/нечётных цифр, при первом вызове должны быть 0
def recursive_counter(number, even = 0, odd = 0):
  #проверяем, не пора ли остановить рекурсию:
  if number <= 0: #дошли до нуля - пора. Кроме того, с отриц. числами будут проблемы.
    return even, odd #возвращаем кортеж значений
  #отрезаем от числа последнюю цифру делением на 10.
  #divmod() - встроенная функция питона
  reduced_number, last_digit = divmod(number, 10)
  if last_digit % 2 == 0: #последняя цифра чётная
    #значит, на одну больше чётную цифру
    return recursive_counter(reduced_number, even+1, odd) #уходим в рекурсию
  else: #последняя цифра нечётная
    #значит, на одну больше нечётную цифру
    return recursive_counter(reduced_number, even, odd+1) #уходим в рекурсию

N = 1234567890
even, odd =  recursive_counter(N) #распаковываем кортеж, который вернула функция
print(f'В числе {N} есть {even} чётных цифр и {odd} нечётных.')
Ответ написан
@twistfire92
Это что такое?
n == n // 10

Может так надо?
n = n // 10

И у вас все равно будут выводиться нули. Объявляйте переменные even odd вне функции и передавайте их в эту функцию в качестве параметра.

Если у вас python 3.6 и выше, то там завезли f-строки. Они поудобнее, ваш вывод был бы более читабелен
print(f"четных - {even}, нечетных - {odd}") (return в этой строке не нужен, как и в остальных случаях)

А рекурсивно - это требование задачи? Или вы посчитали, что так будет лучше?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Idaproject Москва
от 70 000 ₽
БАРС Груп Санкт-Петербург
от 60 000 до 200 000 ₽
Plesk Новосибирск
от 150 000 до 300 000 ₽
23 июл. 2021, в 22:45
3000 руб./за проект
23 июл. 2021, в 22:42
1000 руб./в час
23 июл. 2021, в 21:22
20000 руб./за проект