繁体   English   中英

Python中具有递归的偶数和奇数

[英]Even and Odd numbers with recursion in Python

我正在尝试通过递归的方式解决“ 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))
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

让我们以函数is_even(1)为例。 怎么了?

(1)

  1. 输入is_even(1)
  2. 输入is_odd(1-1),即输入is_odd(0)
  3. 不返回is_even(0)。 输入is_even(0)
  4. x == 0->这将返回True
  5. 您还没有吗,还记得第3步吗? 所以:不是True-> False
  6. is_even(1)=假

现在让我们以is_even(2)为例。 怎么了?

(2)

  1. 输入is_even(2)
  2. 输入is_odd(2-1),即输入is_odd(1)
  3. 不返回is_even(1)
  4. 从(1)中我们知道is_even(1)为False,所以不是False = True

现在使用is_even(3)

(3)

  1. 输入is_even(3)
  2. 输入is_odd(3-1),即输入is_odd(2)
  3. 不返回is_even(2)
  4. 我们从(2)知道is_even(2)是True,所以不是True = False

再次对您的问题:

  • 这会否定is_even(x)的功能吗?

是的:正如您在我的示例中看到的那样,is_even(x)不会否定is_even(x)的结果

  • 这种否定是否意味着返回False或发送到else块?

否。如果函数is_even(x)返回True,则不返回True。 如果函数is_even(x)返回False,则不False返回True。 因此它否定了is_even(x)的结果

  • 到达这里后,我们是否曾经在is_even(x)中降落为True?

正如您在我的示例中所看到的那样,由于您始终使用(x-1)来减小自变量,因此最终您最终将始终到达x = 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM