首页 > 解决方案 > 从给定索引开始的列表中数字的总和,递归

问题描述

我需要找到解决这个问题的方法。我写了一个代码来计算列表中给定数字的总和,从给定的索引开始。

def recsumlisti(index, alist):
if len(alist) == 0:
    return 0
elif index >= len(alist):
    return 0
else:
    return alist[index] + recsumlisti(index + 1, alist)

这是我拥有的代码。当指数为正时它工作得很好,但当指数为负时它表现不佳。

例如。如果参数是recsumlisti(index= -1, alist=[1,2,3,4])而不是只给出 4 作为输出,则函数迭代所有索引直到最终索引,即 index == len(alist ) 达到并给出总和 4 + 1 + 2 + 3 = 10。供您参考的测试用例:

{'index': 2, 'alist': [], 'expected': 0},
{'index': 0, 'alist': [1, 2, 3, 4], 'expected': 10},
{'index': -1, 'alist': [1, 2, 3, 4], 'expected': 4},

我需要改进这个程序的建议,以便它适用于所有指数,正面和负面。我尝试过使用 return alist[index] + recsumlisti(index, alist[(index + 1):])切片方法,但它也会引发错误。

让我知道我的假设是否错误,即使对于负索引,我的代码也可以。谢谢!

标签: pythonrecursion

解决方案


您还可以添加一个三元运算符来检查索引 +1 是否为 0,并将索引设置为len(alist)以终止程序,如果它是

def recsumlisti(index, alist):
    if len(alist) == 0:
        return 0
    elif index >= len(alist):
        return 0
    else:
        nextIndex = (index + 1, len(alist))[index + 1 == 0]
        return alist[index] + recsumlisti(nextIndex, alist)

其余代码再次保持不变


推荐阅读