簡體   English   中英

這種遞歸是否有名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM