gpt4 book ai didi

python - 如果给定一个整数列表和一个名为 x 的数字,如何递归返回列表中每个第 x 个数字的总和

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:09 25 4
gpt4 key购买 nike

那么,如果给定一个整数列表和一个名为 x 的数字,如何递归返回列表中每个第 x 个数字的总和。

在这个任务中“索引”从 1 开始,所以如果 x = 2nums = [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]

但是当它应该为 0 时,它会传递类似 ([2, 3, 6], 5)) -->> 2 的东西。

最佳答案

如果你真的需要递归地做它,你可以在每次调用之前从列表中弹出 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

但是,您可以用一种简单的 pythonic 方式来完成它:

print(sum(nums[x-1::x] if x > 0 else nums[x::x]))

解释:

你使用 nums[start:end:increment] 对列表进行切片,当你将末尾留空时,它会从起始位置切片到列表的末尾,并按指定的增量递增

关于python - 如果给定一个整数列表和一个名为 x 的数字,如何递归返回列表中每个第 x 个数字的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com