D
D
demchenkodenis2021-06-21 15:13:19
Python
demchenkodenis, 2021-06-21 15:13:19

Calculate odd digits of a number using recursion?

Good afternoon!
Help with recursion, I'm stuck on the question Calculate odd and even digits of the entered natural number. Below is my code

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)

Answer the question

In order to leave comments, you need to log in

3 answer(s)
M
mikeyuri, 2021-06-21
@demchenkodenis

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)))

V
Vindicar, 2021-06-21
@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} нечётных.')

M
Mikhail Krostelev, 2021-06-21
@twistfire92

What is it?
n == n // 10
Maybe it's necessary?
n = n // 10
And you will still get zeros. Declare even odd variables outside of a function and pass them as a parameter to this function.
If you have python 3.6 and above, then f-strings were brought there. They are more comfortable, your output would be more readable
print(f"четных - {even}, нечетных - {odd}")(return is not needed in this line, as in other cases)
Is recursive a requirement of the task? Or did you think it would be better?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question