我目前正在尝试编写一个带有两个整数参数的递归函数,并且必须将第一个到最后一个整数的所有值都取下来,将列表连续分成两半,以便将每一边相乘并求积所有整数值。我目前输入了以下代码:
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'
我们将不胜感激任何输入或帮助。
答案 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