[英]Does this type of recursion have a name?
我在python中有一個鏈表,我想編寫一個過濾器函數,如果對f(item)
的調用為true,則返回一個新的鏈表,此實現具有從下到上構建列表的過濾器。 我在理解此遞歸時遇到了麻煩。 這是什么類型的遞歸?
我對像fibonacci這樣的遞歸比較熟悉,其中遞歸遞歸位於最底部。
class Link:
empty = ()
def __init__(self, first, rest=empty):
assert rest is Link.empty or isinstance(rest, Link)
self.first = first
self.rest = rest
def __getitem__(self, i):
if i == 0:
return self.first
else:
return self.rest[i-1]
def __len__(self):
return 1 + len(self.rest)
def __repr__(self):
if self.rest == Link.empty:
return "Link(" + str(self.first) + ")"
return 'Link({0}, {1})'.format(self.first, repr(self.rest))
def filter_link(f, s):
if s is Link.empty:
return s
else:
filtered = filter_link(f,s.rest) # How does this work?
if f(s.first):
return Link(s.first, filtered)
else:
return filtered
這是您習慣的那種遞歸。
我只是查找了遞歸的斐波那契解決方案,其中早期收益在第二行,就像您的代碼一樣。 另外,就像您的代碼一樣,示例中的遞歸發生在更正常的返回之前。
看起來您的代碼從下往上返回了f
批准的元素的新鏈接列表。 也就是說,它創建的新實例Link
元素周圍s.first
,由單個實例終止Link.empty
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.