2013-04-20 5 views
0

는 재귀의Python에서 무제한 깊이의 재귀 메소드를 만드는 방법이 있습니까? 당신이 재귀를 방지해야하는 경우 코드를 훨씬 더 길고 복잡하게하기 때문에 예를 들어

def f(graph): 
    #graph is dictionary of pairs vertex_i:{set of edges (i,j)} for 1<=i,j<=n 
    def g(vertex): 
     for vertex1 in graph: 
      do sth 
      ... 
      for (i,j) in graph[vertex1]: 
       ... 
       g(j)#recursive call 
     ... 
     return ... 

    return g(1) 

깊이 제한과 같은 그래프에 대한 몇 가지 알고리즘을 쓰는 것은, 때때로 매우 성가신입니다. 무제한 깊이 도달 할 수있는 방법이 있습니까? 반환 : 은 어쩌면 당신은 다음과 같은 방법

def nthNumber(n): 
    if n==1: return 1 
    else: return nthNumber(n-1)+1 

(I는 간단 바보 알고 그냥 nthNumber (n)를 작성해야 "와 같은 답을주지 마십시오에 문제의 당신의 일반 솔루션을 설명 할 수 n "- 나는 일반적인 해결책으로 intrested). 도와 주셔서 감사합니다!

+0

다른 방식으로 말해 보겠습니다. max를 사용하여 recurison 메소드를 만들 수 있습니까? 깊이 10 ** 4 또는 10 ** 5? – Antoine

+0

재귀 한계를 10 ** 4로 설정할 수 있지만 파이썬 충돌이 발생할 수 있습니다 (이는 안전 제한을 초과했을 가능성이 있습니다 - 이는 OS에 따라 다릅니다). 또한 : http://stackoverflow.com/questions/2917210/python-what-is-the-hard-recursion-limit-for-linux-mac-and-windows – root

답변

6

무제한 재귀에는 무한한 리소스가 필요합니다. 모든 함수 호출은 스택 엔트리를 필요로하며, 그것들을 저장하기위한 한정된 양의 메모리가있다. 따라서 이 아니므로 재귀 깊이를 무제한으로 설정할 수 없습니다.

당신 인상sys.setrecursionlimit()를 호출하여 제한.

+0

고마워, 그게 옳은 대답이야 :) – Antoine

+0

** 무제한 ! = 무한 **, 그가 요구 한 것은 무제한입니다. 즉, 파이썬은 이것에 대한 어떤 제한도 시행하지 않을 것입니다. – nehemiah

+1

@itsneo : 그건 단지 ... 헤어를 갈라 놓는 것뿐입니다. OS 또는 사용 가능한 하드웨어에서 허용 할 수있는 한계 이상으로 한계를 높일 수 있습니다. 요점은 당신이 * 한도에 부딪 힐 것이라는 것입니다. –