python - 从给定索引开始的列表中数字的总和,递归
问题描述
我需要找到解决这个问题的方法。我写了一个代码来计算列表中给定数字的总和,从给定的索引开始。
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):])
切片方法,但它也会引发错误。
让我知道我的假设是否错误,即使对于负索引,我的代码也可以。谢谢!
解决方案
您还可以添加一个三元运算符来检查索引 +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)
其余代码再次保持不变
推荐阅读
- ruby-on-rails - Rails 属于 with 包括无法识别的二阶关联
- python - 在列表字典中查找重复的字母
- php - 我会在控制器中使用 self、static、this
- spring-data - 为什么扩展 2 个其他 repo 接口的 repo 接口没有连接到控制器中?
- javascript - 如何使用 jquery 在新标签中包装与强标签同级的字符串?
- operating-system - 在上下文切换中将 CPU 分配给另一个进程究竟意味着什么?
- angular - 计算列表 Typescript 的每个元素的点击者
- d3.js - 使用 D3.js、Leaflet 或 Mapbox 用墨卡托地图包裹大圆圈
- javascript - IE array.flat() 对象不支持属性或方法'flat'
- android - 无法解决:com.google.firebase:firebase-core:16.0.5