我有這個清單:
[[1, 2, 3, 4], [5], [6, 7], [8], [9], [10, 11], [12, 13, 14], [15, 16], [15, 16], [15, 16], [17], [18], [19], [20], [21], [20], [21], [], [], [], [], []]
它可以描述為對同一串列中其他專案的參考串列,如下所示:
0 --> 1 2 3 4
1 --> 5
2 --> 6 7
3 --> 8
4 --> 9
5 --> 10 11
6 --> 12 13 14
7 --> 15 16
8 --> 15 16
9 --> 15 16
10 --> 17
11 --> 18
12 --> 19
13 --> 20
14 --> 21
15 --> 20
16 --> 21
17 --> None
18 --> None
19 --> None
20 --> None
21 --> None
因此,從索引 0 可以移動到 1、2、3 或 4。從 1 你可以移動到 5,從 5 你可以移動到 10 等等,直到你不能再移動(比如當你到達索引時17).
我正在嘗試制作一個函式,當輸入上面的串列時會回傳它:
[0,1,5,10,17]
[0,1,5,11,18]
[0,2,6,12,19]
[0,2,6,13,20]
[0,2,6,14,21]
[0,2,7,15,20]
[0,2,7,16,21]
[0,3,8,15,20]
[0,3,8,16,21]
[0,4,9,15,20]
[0,4,9,16,21]
不幸的是,我就是想不出解決辦法。
我知道這可能需要一個遞回函式,但我對此感到很困惑。在不知道我做了什么的情況下,我設法想出了這個功能:
def recurse_into(A,i):
B = [i]
for j in tree[i]:
B = recurse_into(A,j)
return B
它回傳這個:
[0, 1, 5, 10, 17, 11, 18, 2, 6, 12, 19, 13, 20, 14, 21, 7, 15, 20, 16, 21, 3, 8, 15, 20, 16, 21, 4, 9, 15, 20, 16, 21]
由此我可能可以想出一些可以生成所需結果的東西,但我想知道如何直接從遞回函式中獲得我想要的結果。
我將非常感謝有關如何實作這一目標的一些指示或提示。
謝謝!
uj5u.com熱心網友回復:
這是我從我的要求中理解的實作
def dfs(graph, u, curr,res):
c = curr [u]
if(len(graph[u]) == 0):
res.append(c)
for v in graph[u]:
dfs(graph, v, c, res)
graph = [[1, 2, 3, 4], [5], [6, 7], [8], [9], [10, 11], [12, 13, 14], [15, 16], [15, 16], [15, 16], [17], [18], [19], [20], [21], [20], [21], [], [], [], [], []]
u = 0
res = []
dfs(graph, u, [],res)
print(res)
所以我在這里做一個DFS。
uj5u.com熱心網友回復:
tree = [[1, 2, 3, 4], [5], [6, 7], [8], [9], [10, 11], [12, 13, 14], [15, 16], [15, 16], [15, 16], [17], [18], [19], [20], [21], [20], [21], [], [], [], [], []]
def recourse_into(i):
R=[]
if len(tree[i]) ==0 :
return [[i]]
for h in tree[i]:
t=recourse_into(h)
for j in t :
R.append([i] j)
return R
print(recourse_into(0))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537105.html
標籤:Python递归
