Answer the question
In order to leave comments, you need to log in
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
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)))
#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} нечётных.')
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 questionAsk a Question
731 491 924 answers to any question