我正在玩一个改变自身的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。为什么它不会落入无限递归中呢?
答案 0 :(得分:3)
你的原始函数根本不是递归的,不是无限递归的。函数mitsos
创建另一个函数takis
。然后它调用该函数。函数takis
创建另一个函数w
并返回它。新函数变为mitsos
的值,原始mitsos
返回。周期。
重新定义的函数是一步递归的,它再次重新定义mitsos
。新的mitsos
是两步递归的,等等。但它们都不是无限递归的。