2017-01-29 3 views
0

저는 파이썬 함수를 사용하여 무언가 재귀를 피할 수 없었습니다. 어떤 점에서 나는 이것을 만들었다 :파이썬 무한 재귀

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 높습니다. 왜 그것은 무한 재귀에 빠지지 않습니까?

답변

3

원래 함수는 거의 재귀 적이 지 않으며, 무한 재귀 적입니다. 함수 mitsos은 또 다른 함수 takis을 생성합니다. 그런 다음이 함수를 호출합니다. takis 함수는 또 다른 함수 w을 생성하고이를 반환합니다. 새 함수는 mitsos의 값이되고 원래 mitsos이 반환됩니다. 기간.

재정의 된 함수는 하나의 단계 - 재귀 적이며 다시 mitsos을 다시 정의합니다. 새로운 mitsos은 2 단계 재귀 적입니다. 그러나 그 중 하나도 무한 재귀입니다.

+0

그렇지만 라인의 'mitsos'에 : – dennis3678

+0

mitsos = takis (mitsos) takis는 f를 호출하여 기본적으로 mitsos이고 거기에서 mitsos를 다시 변경해야합니다. – dennis3678

+1

예, 변경됩니다. 그러나 그것을 부르지 않습니다. – DyZ