python - 这种递归可行吗?
问题描述
有人可以向我解释这段递归代码是如何工作的吗?因为只有一个 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
解决方案
这对相互递归的函数利用了三个事实:
- 0 是偶数
x
即使x - 1
是奇数。x
如果x - 1
是偶数,则为奇数。
1 是奇数,因为 1 - 1 == 0 是偶数。
2 是偶数,因为 2 - 1 == 1 是奇数。
等等。
这不是确定任意值是偶数还是奇数的有效n
方法,但它是逻辑上正确的方法。(无论如何,假设参数始终是自然数。将负整数作为参数传递给任何一个都会导致无限递归,因为永远不会达到基本情况。)
推荐阅读
- java - 有没有办法创建一个类的实例
在传递泛型的构造函数中将 Class 作为参数 - c++ - Maya API(C++) - MayaApi 到 c++ 不能正常工作
- android - 如何使用firebase MLkit检测文本识别中的多种语言?
- azure - 将 API 管理设置为 VNET 内部的外部时,我可以在内部路由流量吗?
- python - 有没有更有效的方法来制作这个程序?
- javascript - 如何在服务人员中缓存动态 url?它与预缓存有什么关系吗?我正在使用 ReactJS 默认 serviceWorker
- ruby-on-rails - 未定义的局部变量或方法“sub_task”
- mongodb - 使用地图从字符串更改日期
- sql - postgres 无法按时间和日期获取查询过滤器,即
- visual-studio - 获取最新版本 - TFS 中缺少文件但在本地文件夹中可用