将列表递归地分成两半,以找到所有数字的乘积

时间:2018-08-06 19:36:32

标签: python python-3.x

我目前正在尝试编写一个带有两个整数参数的递归函数,并且必须将第一个到最后一个整数的所有值都取下来,将列表连续分成两半,以便将每一边相乘并求积所有整数值。我目前输入了以下代码:

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:multiple()缺少1个必需的位置参数:'m'

我们将不胜感激任何输入或帮助。

2 个答案:

答案 0 :(得分:1)

multiple(n,m)带有两个参数n和m,但是在递归(在乘法函数中返回的位置)步骤中,您将列表传递给了乘法函数。 您需要类似的东西:

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)

multiply([i代表范围(n,m + 1)中的i]]

答案 1 :(得分:0)

尝试类似这样的方法。您无需通过这种方式创建额外的内存。

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