【发布时间】:2020-08-31 09:03:29
【问题描述】:
我在学习递归时偶然发现了一个问题。如何通过递归获取列表中所有元素出现的索引?
我的理解:
当索引等于数组的长度时,它返回数组(或应该返回索引数组)
第一次调用增加 fsf(found_so_far) 的出现并增加索引(当 if 条件执行时)
- 第二次调用只增加索引 idx(条件的 else 部分)
缺陷:
- 每次调用函数时都会创建一个新的空列表(存储所有出现的键的结果)
- append 函数不会将匹配项追加到结果列表中
- 在所有调用之后,由条件的 else 部分调用的空列表返回一个空列表(调用后/回溯)
我的代码:
def allindex(arr, idx, fsf, key): #arr=array, idx=index, fsf=found so far, key=key to be found
list = []
if idx == len(arr):
return list
if arr[idx] == key:
allindex(arr, idx + 1, fsf + 1, 8)
list.append(idx)
return list
else:
allindex(arr, idx + 1, fsf, 8)
return list
arr = [2, 4, 5, 8, 1, 8, 6, 8, 7, 9]
allindex(arr, 0, 0, 8) #passes an (array,starting_index,found_so_far,key)
预期输出:
[3,5,7]
得到了:
[]
【问题讨论】:
标签: python arrays python-3.x list recursion