Python 查找列表中与其给定数的模为0的最大数

Python 查找列表中与其给定数的模为0的最大数,python,recursion,Python,Recursion,我需要定义一个递归函数来接收 非负整数数字,以及正整数m,并返回列表中除m后不带余数的最大数字 我不能在列表中使用循环或python的max函数 我试过: def find_max_mod(numbers, m): mx = 1 mxn = -1 if len(numbers) == 1 and numbers[0] % m == 0: if mx > numbers[0]: mx = numbers[0]

我需要定义一个递归函数来接收 非负整数
数字
,以及正整数
m
,并返回列表中除m后不带余数的最大数字

我不能在列表中使用循环或python的max函数

我试过:

def find_max_mod(numbers, m):
    mx  = 1
    mxn = -1
    if len(numbers) == 1 and numbers[0] % m == 0:
        if mx > numbers[0]:
            mx = numbers[0]
            return mx
    if len(numbers) == 1 and numbers[0] % m != 0:
        return -1
    elif len(numbers) == 0:
        return -1
    elif numbers[-1] % m == 0 and numbers[-1] > mx:
        mx = numbers[-1]
    numbers = find_max_modulo(numbers[:-1], m)

    return mx
我不知道如何保存我最大的号码。每个递归循环都会在我的
mx
number上进行重写

我想我的基本条件有问题,但这是最小的问题。

这是有效的:

def find_max_mod(list_numbers, large_number, current_max_valid=0):
    if list_numbers[0] % large_number == 0:
        if current_max_valid < list_numbers[0]:
            current_max_valid = list_numbers[0]
    if len(list_numbers) > 1:
        return find_max_mod(list_numbers[1:], large_number, current_max_valid)
    return current_max_valid

list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
print(find_max_mod(list_numbers, 5))
def find_max_mod(列出编号、大编号、当前编号有效=0):
如果列表编号[0]%大编号==0:
如果当前最大有效<列表编号[0]:
当前最大有效=列表编号[0]
如果len(列表编号)>1:
返回find_max_mod(列表编号[1]、大编号、当前最大有效)
返回当前\u最大\u有效
列表编号=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]
打印(查找最大修改(列表编号,5))

您已经接近了,只需修改return语句即可

elif numbers[-1] % m == 0 and numbers[-1] > mx:
    mx = numbers[-1]
numbers = find_max_modulo(numbers[:-1], m)

return mx
致:


如果你想研究递归,你应该尝试找到适合你主题的练习。例如,递归的Fibonnacci函数就是一个好的开始

现在,对于您的问题,通常,对于递归函数,您需要一个if语句来停止程序的迭代。该条件可能是一个需要作为参数传递给流程的变量,也可能是一个需要满足的硬编码条件

当您需要浏览所有列表时,您需要考虑列表末尾的停止条件。您有多种选择,但我建议您在每次迭代中弹出一个项目:如果它符合您的要求,将检查该项目


现在,你想保留最大的数字吗? 您只需检查从进一步计算收到的项目是否比您在当前递归会话中的项目更适合:以便您可以保留最适合您需要的项目


祝你好运

为什么要递归地执行此操作?。。你不必。我在自学,想练习我的递归技能。有比这更好的例子。在某些情况下需要递归。但是了解它的一件重要的事情是,如果可以的话,不要使用它。由于递归在Python中默认深度限制在999左右,我想说递归在这种特定语言中很少是防弹的解决方案——迭代算法是Python的核心,从递归到迭代的转换非常简单。
elif numbers[-1] % m == 0 and numbers[-1] > mx:
    return numbers[-1]
return find_max_modulo(numbers[:-1], m)