因此,如果给定一个整数列表和一个称为x的数字,该如何递归返回列表中每个第x个数字的和。
在此任务中,“索引”从1开始,因此,如果x = 2
和nums = [2, 3, 4, -9]
,输出应为-6
(3 + -9)。
X也可以是负数,在这种情况下,索引将从列表的末尾开始,请参见下面的示例。
如果为x = 0
,则总和也应0
为。
例如:
print(x_sum_recursion([], 3)) # 0
print(x_sum_recursion([2, 5, 6, 0, 15, 5], 3)) # 11
print(x_sum_recursion([0, 5, 6, -5, -9, 3], 1)) # 0
print(x_sum_recursion([43, 90, 115, 500], -2)) # 158
print(x_sum_recursion([1, 2], -9)) # 0
print(x_sum_recursion([2, 3, 6], 5)) # 0
print(x_sum_recursion([6, 5, 3, 2, 9, 8, 6, 5, 4], 3)) # 15
我一直在尝试连续5个小时执行此功能!!!
想看看别人如何解决这个问题。
这是我想出的最好的。
def x_sum_rec_Four(nums: list, x: int) -> int:
if len(nums) == 0:
return 0
elif len(nums) < x:
return 0
elif x > 0:
i = x - 1
return nums[i] + x_sum_rec_Four(nums[i + x:], x)
elif x < 0:
return x_sum_rec_Four(nums[::-1], abs(x))
我的递归问题是完成返回应该是:
if len(nums) < x:
return nums[0]
但这会传递诸如([2, 3, 6], 5)) -->> 2
应为0的信息。
如果您确实需要递归执行此操作,则可以在每次调用之前从列表中弹出x-1元素,请遵循以下注释:
def x_sum_recursion(nums, x):
# if x is negative, call the function with positive x and reversed list
if x < 0:
return x_sum_recursion(nums[::-1], abs(x))
# base case for when x is greater than the length of the list
if x > len(nums):
return 0
# otherwise remove the first x-1 items
nums = nums[x-1:]
# sum the first element and remove it from the next call
return nums[0] + x_sum_recursion(nums[1:], x)
print(x_sum_recursion([], 3)) # 0
print(x_sum_recursion([2, 5, 6, 0, 15, 5], 3)) # 11
print(x_sum_recursion([0, 5, 6, -5, -9, 3], 1)) # 0
print(x_sum_recursion([43, 90, 115, 500], -2)) # 158
print(x_sum_recursion([1, 2], -9)) # 0
print(x_sum_recursion([2, 3, 6], 5)) # 0
print(x_sum_recursion([6, 5, 3, 2, 9, 8, 6, 5, 4], 3)) # 15
但是,您可以通过一种简单而Python的方式来实现:
print(sum(nums[x-1::x] if x > 0 else nums[x::x]))
说明:
您可以使用以下方式对列表进行切片:将nums[start:end:increment]
结尾保留为空,它将从起始位置开始进行切片,直到列表末尾,然后按指定的增量递增
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句