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

因此,如果给定一个整数列表和一个称为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,15,5],3))  # 11
print(x_sum_recursion([0,-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,6],5))  # 0
print(x_sum_recursion([6,2,9,8,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,5)) -->> 2应该为0时传递类似的信息。

ly0110 回答:如果给定一个整数列表和一个称为x的数字,如何递归返回列表中每个第x个数字的总和

如果您确实需要递归执行此操作,则可以在每次调用之前从列表中弹出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,15,5],3))  # 11
print(x_sum_recursion([0,-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,2,9,8,4],3))  # 15

但是,您可以通过一种简单而Python的方式做到这一点:

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

说明:

当您将结尾留空时,您使用nums[start:end:increment]对列表进行切片,它从开始位置一直剪切到列表的末尾,并以指定的增量递增

本文链接:https://www.f2er.com/3156395.html

大家都在问