递归函数 - 计算元组中偶数的数量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归函数 - 计算元组中偶数的数量相关的知识,希望对你有一定的参考价值。
我必须计算一个元组中的对数。我无法使用while或for。它必须是递归函数。我必须具备的结果是,例如:
count_pairs((4, 5, 6))
2
count_pairs(())
()
count_pairs((3, 5, 7))
0
这是我到目前为止:
def count_pairs(t):
if len(t) == 0:
return ()
elif t[0] % 2 == 0:
return 1 + count_pairs(t[1:])
else:
return count_pairs(t[1:])
我的难点是如果给我一个空元组,我怎么能返回()。因为我拥有的每一个结果都是()。有些东西不对。你能帮我么?我是Python的初学者。谢谢
答案
写这个的一个简单方法是将当前元素的结果(t
的第一个元素)存储在变量(this
)中,并将计数对(偶数元素)的结果存储在另一个变量(rest
)中。然后,如果rest
有一个“truthy值”(它不是一个空元组),那么你可以将0
或1
返回给它;否则你只需返回这个数字,不要连接这两个数字。
也就是说,
def count_pairs(t):
if len(t) == 0:
return ()
rest = count_pairs(t[1:])
this = t[0] % 2 == 0
return this + rest if rest else this
工作良好:
>>> count_pairs((4, 5, 6))
2
>>> count_pairs(())
()
>>> count_pairs((3, 5, 7))
0
然而,正如你在评论中所遗漏的那样,事实上确实有必要为空元组返回0
,而不是另一个空元组。这是因为函数通常应该返回相同的数据类型(在Python中不强制它使代码更灵活,但它绝对是其他语言的要求)。
如果你这样做,代码也会变得更整洁:
def count_pairs(t):
if len(t) == 0:
return 0
return (t[0] % 2 == 0) + count_pairs(t[1:])
现在表现出来,我认为是一种更自然的方式:
>>> count_pairs((4, 5, 6))
2
>>> count_pairs(())
0
>>> count_pairs((3, 5, 7))
0
脚注
我只想指出,t[0] % 2 == 0
语句相当于1 if t[0] % 2 == 0 else 0
,因为1
相当于True
和0
到False
,在Python中。这使代码更清晰。
另一答案
在python2中
def count_pairs(tup):
if len(tup) == 0:
return ()
elif len(tup) == 1:
return (tup[0] + 1) % 2
else:
return ((tup[0] + 1) % 2) + count_pairs(tup[1:])
以上是关于递归函数 - 计算元组中偶数的数量的主要内容,如果未能解决你的问题,请参考以下文章