【问题标题】:How to if given a list of integers and a number called x, return recursively the sum of every x'th number in the list如果给定一个整数列表和一个名为 x 的数字,如何递归返回列表中每个第 x 个数字的总和
【发布时间】:2020-03-02 07:25:50
【问题描述】:

那么,如果给定一个整数列表和一个名为 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)) --&gt;&gt; 2 这样的东西。

【问题讨论】:

    标签: python list recursion int


    【解决方案1】:

    如果你真的需要递归,你可以在每次调用之前从列表中弹出 x-1 个元素,按照下面的 cmets 操作:

    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] 对列表进行切片,它将从起始位置切片到列表末尾,并按指定的增量递增

    【讨论】:

    • 我很想用第三个参数来做,但必须用 2 个参数来做!这就是为什么我花了 5 个小时试图弄清楚这一点。我有一个很好的解决方案,使用第三个参数,但这没有用,因为它必须只有给定的 2 个。
    • @master_of_code 你能从列表中弹出项目吗?还是您必须保持不变以供进一步使用?
    • 我猜,只要它递归并返回正确的总和。
    • @master_of_code 被编辑为在不添加第三个参数的情况下完成
    • @Mohd 你在第一次递归调用中留下了 3 arg 版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多