这种类型的递归是否有名称?

时间:2017-04-18 14:08:54

标签: python recursion

我在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

1 个答案:

答案 0 :(得分:0)

这个你习惯的那种递归。

我刚刚查找了一个递归fibonacci解决方案,其中早期返回位于第二行,就像您的代码一样。此外,与您的代码一样,示例中的递归发生在更正常的返回之前。

您的代码看起来像是从下到上返回函数f批准的元素的新链接列表。也就是说,它会在元素Link周围创建s.first的新实例,由Link.empty的单个实例终止。