Вы создаете новый список lis
на каждой рекурсии. (Кстати, вы можете попытаться найти более описательные имена.) Однако возвращается только первый список, потому что вы ничего не делаете с другими списками, которые являются результатом рекурсии. Вместо этого вы просто вызываете функцию, которая просто создает новый список без каких-либо действий со значением, возвращаемым функцией. Вы можете увидеть это в следующей строке:
ppend(n.rest) # a new list is created but nothing is done with the result of the function
Если вы только планируете использовать функцию один раз, вы можете просто переместить 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
выше подход, однако , не будет работать, если вы планируете использовать функцию несколько раз и всегда нуждаетесь в новом списке. В последнем случае, вы можете добавить вторую функцию, как это:
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
@Ali Отлично! Я рад, что вы поняли это. –
Спасибо, много человек ... Я на самом деле только начинаю учиться рекурсии ... рекурсия немного технична, на мой взгляд. – Andre