递归函数 - 计算元组中偶数的数量

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值”(它不是一个空元组),那么你可以将01返回给它;否则你只需返回这个数字,不要连接这两个数字。

也就是说,

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相当于True0False,在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:])

以上是关于递归函数 - 计算元组中偶数的数量的主要内容,如果未能解决你的问题,请参考以下文章

使用元组和 3 个 UIPickerviews 计算小计

Python求解,,怎样求出元组中的各元素之和?

如何在不停止递归的情况下返回递归函数中的值?

从元组中提取向量

从元组中提取向量

Python 元组内置函数