您正在爲每個遞歸創建一個新的lis
列表。 (順便說一句,您可能會嘗試查找更多描述性名稱。)但是,只返回第一個列表,因爲您不會對由遞歸生成的其他列表執行任何操作。相反,您只需調用該函數,該函數只是創建一個新列表,而不用函數返回的值做任何事情。然而
lis = []
def ppend(n):
if n.rest is not None: # the first if statement appears unnecessary
lis.append(n.first)
ppend(n.rest)
return lis # or don't return it but simply refer to lis where you need to
上述方法,:您可以在下面一行看到這一點:
ppend(n.rest) # a new list is created but nothing is done with the result of the function
如果你只打算使用一次的功能,你可以簡單地移動功能之外lis
分配,如果您打算多次使用此功能並且始終需要一個新列表,它將不會起作用。在後一種情況下,您可以添加第二個功能是這樣的:
def make_ppend(n, lis): # add lis as a parameter to be explicit, but you could rely on scope instead of adding this extra parameter
if n.rest is not None:
lis.append(n.first)
make_ppend(n.rest, lis)
def ppend(n):
lis = [] # now in the local scope
make_ppend(n, lis)
return lis
我猜你是像第二個解決方案之後。
太棒了!好吧,這是有道理的。 – Andre 2014-10-19 01:01:14
@Ali太棒了!我很高興你明白了。 – 2014-10-19 01:02:15
非常感謝你......我其實只是開始學習遞歸......遞歸在我看來有點技術性。 – Andre 2014-10-19 01:04:01