递归地将列表拆分为两半以查找所有数字的乘积

2024-09-27 07:24:32 发布

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

我现在正试图写一个递归函数,它接受两个整数参数,并且必须取从第一个到最后一个整数的所有值,连续地将列表拆分为两半,以便将每一个边相乘,然后求出所有整数值的乘积。我目前打印出以下代码:

def multiply(n, m):

    lis = range(n, m)
    half = len(lis)//2
    leftSide = lis[:half]
    rightSide = lis[half+1:]
    if n == 0 or m == 0:
        return 0
    elif len(lis) == 0:
        return 0
    elif len(lis) == 1:
        return lis[0]
    return multiply(leftSide) * multiply(rightSide)

但是当我运行代码时,我得到了以下错误:

TypeError: multiply() missing 1 required positional argument: 'm'

如有任何意见或帮助,我们将不胜感激。在


Tags: 代码列表参数lenreturndef整数multiply
2条回答

试试这个。你不必用这种方法来创建额外的内存。在

def multiply(lo, hi):
    if lo == hi:
        return lo
    else:
        mid = (lo + hi) // 2
        return multiply(lo, mid) * multiply(mid + 1, hi)

product = multiply(1, 4) # 1 * 2 * 3 * 4
print(product) # 24

multiply(n,m)接受两个参数n和m,但是在递归(在multiply函数中返回)步骤中,您将向乘法函数传递一个列表。 你需要这样的东西:

def multiply(myList: List[int]) -> List[int]:
if len(myList) == 0:
    return 0
elif len(myList) == 1:
    return myList[0]
half = len(myList)//2
leftSide = myList[:half]
rightSide = myList[half:]
return multiply(leftSide) * multiply(rightSide)

乘以([i代表范围内的i(n,m+1)])

相关问题 更多 >

    热门问题