我正在解决以下问题:我们得到一个嵌套的整数列表,我们想要找到乘积和。积和就是数的和,但是对于嵌套列表中的数,我们需要将它们与嵌套深度相乘
例如:array=[2,5,[7,-1]]->;输出=19###2+5+2*(7+-1)
下面是一个正确的递归解决方案:
def productSum(array, multiplier = 1):
total_sum = 0
for i in range(len(array)):
if isinstance(array[i],int):
total_sum += array[i]
else:
total_sum += productSum(array[i],multiplier+1)
return total_sum *multiplier
然而,当我最初编写我的解决方案时,我没有将*乘数放在返回的末尾,而是将乘数放在“if”语句中,因此我的解决方案是:
def productSum(array, multiplier = 1):
total_sum = 0
for i in range(len(array)):
if isinstance(array[i],int):
total_sum += array[i] * multiplier
else:
total_sum += productSum(array[i],multiplier+1)
return total_sum
我只是想理解为什么我上面的解决方案不能产生期望的结果,因为我的理解是它们是相同的,因为在每个递归调用中“乘法器”是固定的,那么为什么我用乘法器乘以整数然后求和,而不是求和整数然后用乘法器相乘呢???如果我正确理解以上内容,这就是两者的区别
举个例子,输入:array:[5,2,7,1,3,6,13,8,4]],第一个解产生27个,这是正确的,而第二个解产生12个,这是错误的
问题是,在初始解决方案中,您没有将
productSum(array[i],multiplier+1)
乘以乘数如果只想将数值相乘,则乘法器需要是深度级别的阶乘,因为乘法相互叠加
例如:
计算为:
传播乘法:
请注意,-13和8乘以2和3(而不是像初始代码那样仅乘以3)
顺便说一句,您可以在理解上使用sum函数,而不是for循环
相关问题 更多 >
编程相关推荐