我试图通过递归来解决“is_even”和“is_odd”函数的问题。我不明白这个函数如何编写永远评估为False,或者任何不是0的函数评估为True。我在teamtreehouse.com工作区中仔细检查了它,以确保它可以正常工作,但我无法弄清楚它是如何工作的。
我知道它通过递归递减,但我不明白is_odd(x)是如何工作的。如果is_odd(x)只是否定了is_even中的所有内容,为什么所有数字都不能评估为True?还是错?
def is_even(x):
if x == 0:
return True
else:
return is_odd(x-1)
def is_odd(x):
return not is_even(x)
# Does this negate the function of is_even(x)?
# Does that negating mean returning False, or sending to else block?
# If the negating does automatically sends to the else block
# After we get here, do we ever land at True in is_even(x)?
# If not, how do we ever land at False?
print(is_even(1))
print(is_even(2))
print(is_even(3))
答案 0 :(得分:2)
x = 0
is_even: True
x = 1
is_even:
is_odd(0):
is_even(0): True
not True: False
False
x = 2
is_even:
is_odd(1):
is_even(1): False
not False: True
True
x = 3
is_even:
is_odd(2):
is_even(2): True
not True: False
False
答案 1 :(得分:0)
让我们举一个函数is_even(1)的例子。会发生什么?
(1)
现在让我们举一个is_even(2)的例子。会发生什么?
(2)
现在使用is_even(3)
(3)
再次提出问题:
是:不是is_even(x)否定了is_even(x)的结果,正如您在我的示例中看到的那样。
没有。如果函数is_even(x)返回True,则不返回False。 如果函数is_even(x)返回False,则False不返回True。所以它否定了is_even(x)
的结果由于你总是用(x-1)减少参数,你总是会得到x = 0,正如你在我的例子中看到的那样。