Форум сайта python.su
sss
Отредактировано cybermajestic (Ноя. 5, 2018 23:03:51)
Офлайн
Попробуй указать "print(is_odd(-1))" - что произойдёт?
Офлайн
Да, оригинальный способ проверки четности чисел. По сути, ваш код это программная запись следующего рекурсивного определения четного и нечетного чисел:
1) Число 0 четное по определению
2) Число n четно, если n-1 нечетное
3) Число n нечетно, если оно не четно
Что просходит, когда мы вызываем, например, is_even(2):
1) проверяется нечетность n-1: т.е. вызывается is_odd(1), это в свою очередь равно not , теперь вызывается is_even(1), что приводит к not[ not ], а is_even(0) - это True, таким образом not not True = True, и мы имеем, что 2 - это четное.
Создаваемая данными функциями рекурсия фактически вычисляет is_even(0) “применив” предварительно n-раз операций not к результату. C любым четным not-ы друг друга “сокращают”, а c нечетным - один not остается и меняет is_even(0) =True на False.
Отредактировано scidam (Окт. 3, 2016 03:00:53)
Офлайн