我在python中有一个链表,我想写一个过滤函数,如果对f(item)
的调用为真,则返回一个新的链接列表,这个实现有一个过滤器,从下到上构建列表。我无法理解这种递归。这是什么类型的递归?
我更熟悉像斐波纳契这样的递归,其中返回递归位于最底层。
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
答案 0 :(得分:0)
这个是你习惯的那种递归。
我刚刚查找了一个递归fibonacci解决方案,其中早期返回位于第二行,就像您的代码一样。此外,与您的代码一样,示例中的递归发生在更正常的返回之前。
您的代码看起来像是从下到上返回函数f
批准的元素的新链接列表。也就是说,它会在元素Link
周围创建s.first
的新实例,由Link.empty
的单个实例终止。