blindpew
Окт. 2, 2016 23:23:31
Попробуй указать "print(is_odd(-1))" - что произойдёт?
scidam
Окт. 3, 2016 02:58:38
Да, оригинальный способ проверки четности чисел. По сути, ваш код это программная запись следующего рекурсивного определения четного и нечетного чисел:
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.