Python无限递归

时间:2017-01-29 22:00:33

标签: python decorator infinite-recursion

我正在玩一个改变自身的python函数,无法避免无限递归。在某些时候我做了这个:

def mitsos(a):
    global mitsos
    def takis(f):
            def w(*args, **kargs):
                    ret = f(*args, **kargs)
                    return ret + 1
            return w
    mitsos = takis(mitsos)
    return a

这出乎意料地奏效了。如果我多次调用mitsos(1),结果总是比前一个结果高1。为什么它不会落入无限递归中呢?

1 个答案:

答案 0 :(得分:3)

你的原始函数根本不是递归的,不是无限递归的。函数mitsos创建另一个函数takis。然后它调用该函数。函数takis创建另一个函数w并返回它。新函数变为mitsos的值,原始mitsos返回。周期。

重新定义的函数是一步递归的,它再次重新定义mitsos。新的mitsos是两步递归的,等等。但它们都不是无限递归的。