【问题标题】:Python infinite recursionPython无限递归
【发布时间】:2017-01-29 22:00:32
【问题描述】:

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

【问题讨论】:

    标签: python decorator infinite-recursion


    【解决方案1】:

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

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

    【讨论】:

    • 是的,但在 'mitsos' 行:
    • mitsos = takis(mitsos) takis 调用 f 来制作 w 这基本上是 mitsos 并且在那里它应该再次改变 mitsos
    • 是的,它改变了它。但它没有调用它。
    • 我还是一头雾水。 mitsos 制作 takis 并调用它。但它把它自己称为参数 takis 调用的参数。 mitsos 的论据使一个 takis 并调用它。那不应该永远运行吗?
    • 请注意,在创建了一个新的w() 之后(可以递归调用mitsos()),它实际上从未被调用过。分配给mitsos,原来的mitsos返回。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2021-12-23
    • 2015-06-14
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多