Python 如何使用递归查找列表中的可除数?

Python 如何使用递归查找列表中的可除数?,python,list,recursion,Python,List,Recursion,我在做一个函数,把一个整数列表作为参数,我想看看列表中是否有5项可以被2整除 例如,如果我通过这个调用调用函数“find_numbers”: print(find_numbers([1,4,6,8,5,66,22,3])) 它应返回: True 因为列表有5个项目可以被2(4,6,8,66和22)整除,否则它应该返回false 我该怎么做呢 谢谢你的帮助 注意:我需要在以后的程序中使用递归,我知道使用循环会更容易,但以后我会更头疼(再次感谢您)。编辑:为误读道歉。现在它是递归的,尽

我在做一个函数,把一个整数列表作为参数,我想看看列表中是否有5项可以被2整除

例如,如果我通过这个调用调用函数“find_numbers”:

  print(find_numbers([1,4,6,8,5,66,22,3]))
它应返回:

   True
因为列表有5个项目可以被2(4,6,8,66和22)整除,否则它应该返回false

我该怎么做呢

谢谢你的帮助


注意:我需要在以后的程序中使用递归,我知道使用循环会更容易,但以后我会更头疼(再次感谢您)。

编辑:为误读道歉。现在它是递归的,尽管我很难弄清楚为什么需要这个

在列表中迭代,直到找到一个
n
数字,其中
模2==0
%
是python
模运算符

def find_numbers(l, i=0, count=0):
  try:
    if count == 5:
      return True
    elif l[i] % 2 == 0:
      return find_numbers(l, i=i+1, count=count+1)
    else: 
      return find_numbers(l, i=i+1, count=count)
  except IndexError as e:
    return False
print(find_numbers([1, 2, 4, 6, 3, 1])) # False
print(find_numbers([1, 1, 1, 1, 1, 1])) # False
print(find_numbers([1, 2, 2, 4, 6, 1])) # False
print(find_numbers([1, 2, 2, 2, 2, 2])) # True
print(find_numbers([1])) # False
当且仅当
x
满足条件的次数足够多时,此项才会返回True。如果迭代到列表中不可操作值所在的索引(例如a
str
),则会抛出错误。它将捕获索引器,以便可以像上一个示例中那样获取短列表


说明:这里需要记住的重要一点是,最后一个案例是调用堆栈的分支。因此,如果最后一个调用返回
True | False
,并且之前的每个后续调用只能返回一个错误(我提到的
str
输入案例)或
True | False |另一个递归调用
,那么我们可以预期最后一个案例就是其中之一


另一个好处是,当它找到第五个匹配项时,它就会停止,这样你就不用再继续遍历列表了,我想。也许这就是OP想要递归的原因。

这里有另一种方法,可以保存列表元素的记录,这些元素可以被2整除:

def divi(a, number=5, divs=[]):
    if a == []:
        return True if len(divs) == number else False
    if not a[0] % 2:
       divs.append(a[0])
    return divi(a[1:], divs)


test = [
    [1, 2, 4, 6, 3, 1],
    [1, 1, 1, 1, 1, 1],
    [1, 2, 2, 4, 6, 1],
    [1,2, 2, 2, 2, 2],
    [1]
]

for elm in test:
    divs = []
    print('{} => {} # {}'.format(elm, divi(elm, divs=divs), divs))
输出:

[1, 2, 4, 6, 3, 1] => False # [2, 4, 6]
[1, 1, 1, 1, 1, 1] => False # []
[1, 2, 2, 4, 6, 1] => False # [2, 2, 4, 6]
[1, 2, 2, 2, 2, 2] => True # [2, 2, 2, 2, 2]
[1] => False # []

你能至少包括一次尝试和你遇到的问题吗?