0

我只是在玩一个会改变自身并且无法避免无限递归的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。为什么它不会陷入无限递归呢?

4

1 回答 1

3

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

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

于 2017-01-29T22:08:51.400 回答