这是一个使用递归在列表中查找偶数的正确代码吗?

2024-06-17 12:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用递归法在列表中找到偶数,下面的代码好吗?(Python)

def evenlis(lis):  
    n=len(lis)  
    if n==0:  
        return None  
    else:
        if lis[0]%2==0
            print lis[0]
        evenlis(lis[1:])

Tags: 代码none列表lenreturnifdefelse
2条回答

函数通常用于在处理后返回值。在您的例子中,您正在打印结果。你可以改变,像这样

def evenlis(lis):  
    if len(lis) == 0:
        return []  
    else:
        return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:])
  1. 如果列表的长度为零,则返回一个空列表

  2. 否则,如果当前元素是偶数,则使用条件表达式([lis[0]] if lis[0] % 2 == 0 else [])创建一个包含当前元素的临时列表

  3. 并将其与递归调用同一函数的结果以及其余元素连接起来

但是,正如Jon在评论中提到的,这不会扩展到更大的列表,因为我们可能会消耗所有的堆栈空间。我们通常使用列表理解和过滤条件来获得结果,如下所示

^{pr2}$

我们遍历列表,检查当前数字是否可以被2整除,如果可以,我们将该元素添加到结果列表中。在

接受的答案不会为我产生预期的结果;第二个条件中的返回值的顺序似乎是错误的。以下是我的解决方案:

def even(nums):
    if not nums:
        return []
    elif nums[0] % 2 == 0:
        return [nums[0]] + even(nums[1:])
    else:
        return even(nums[1:])
^{pr2}$

(我没有足够的声誉发表评论)

相关问题 更多 >