首页 > 解决方案 > 这种递归可行吗?

问题描述

有人可以向我解释这段递归代码是如何工作的吗?因为只有一个 if 语句检查变量 x 是否等于 0,如果值等于 0,则返回 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)

print(is_odd(17))  # outputs true
print(is_even(23))  # outputs false

标签: python

解决方案


这对相互递归的函数利用了三个事实:

  1. 0 是偶数
  2. x即使x - 1是奇数。
  3. x如果x - 1是偶数,则为奇数。

1 是奇数,因为 1 - 1 == 0 是偶数。

2 是偶数,因为 2 - 1 == 1 是奇数。

等等。

这不是确定任意值是偶数还是奇数的有效n方法,但它是逻辑上正确的方法。(无论如何,假设参数始终是自然数。将负整数作为参数传递给任何一个都会导致无限递归,因为永远不会达到基本情况。)


推荐阅读