0
這是我想出的非遞歸代碼。Python:製作一個採用列表的遞歸函數,並返回一個包含前一個列表元素但不重複的列表?
def newlst(lst):
new_lst = []
for element in lst:
if element not in new_lst:
new_lst.append(element)
return new_lst
現在,這裏是我在一個遞歸版本的嘗試:
def newlst(lst):
new_lst = []
if lst == []:
return new_lst
if lst[0] in new_lst:
new_lst.append(lst[0])
else:
return newlst(lst[1:])
我知道,我每一個函數調用本身,我不知道在哪裏的時間分配newlst空列表值否則分配它...所以我迷路了。
你有遞歸過程中隨身攜帶的結果,所以你的第二個'newlist'功能缺少這個論點。 otoh,這是一個O(n ** 2)的方式來做到這一點 - 雖然排序只是O(n日誌n)... – thebjorn
這樣做與遞歸不是一個好主意......如果這是一個任務,告訴你的老師,這是一個學習遞歸的可怕的練習,他們應該想一個更好的練習。 – poke
通過使用'bisect'模塊來執行插入排序(而不是'append'),您可能潛在地挽救了此算法的複雜性,但這種排除了遞歸的需要(因爲您只是遍歷列表) 。我同意@poke說,這是一個學習遞歸的可怕練習。 – thebjorn