2014-11-02 4 views
0

안녕하세요. 변수의 값을 변경하지 않고 함수를 통해 재귀하는 방법이 있는지 궁금합니다.변수를 변경하지 않고 재귀하는 방법

def helper_list_range(self, low, high, rangelist): 
    if self is EmptyValue: 
     return rangelist 

    else: 
     if self.left is not None and self.right is not None: 
      if self.root <= high and self.root >= low: 
       rangelist.append(self.root) 

      self.left.helper_list_range(rangelist) 
      self.right.helper_list_range(rangelist) 

      return rangelist 


def list_range(self, low, high): 

    rangelist = [] 
    self.helper_list_range(low, high, rangelist) 
    return rangelist 

내가 함수가 재귀를 수행 할 때 그 값을 변경하지 않고 rangelist에 추가 할 수 있도록 당신은 내가 도우미 함수를 사용하고 있음을 볼 수 있듯이 :

여기 내 코드입니다.

도우미 기능을 사용하지 않고이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 도우미 기능을 사용하는 것은 조금 애매한 것 같습니다.

+0

도우미 기능은 "값을 변경하지 않고 rangelist에 추가"와 아무런 관련이 없습니다. 도우미 함수는 main 함수에서 전달 된 빈 목록을 사용하여 모든 작업을 수행하는 것입니다. –

+0

예 main 함수에서 빈 목록을 만들었지 만 도우미 함수에서 빈 목록을 만들었습니다. 일단 함수가 재귀되면 목록은 다시 비게됩니다. 재귀가 일어나고있는 곳과 같은 함수에서리스트를 가질 수 있다면 궁금합니다. – Andre

답변

2

난 당신이 기본 인수를 찾을 생각 :

def list_range(self, low, high, rangelist = None): 

    if rangelist is None: 
     rangelist = [] 
    # here goes the code of helper_list_range 
+0

오 예,이 트릭을 할 것입니다. – Andre

1

내가 당신이라면 내가 매개 변수로 자기를 사용하지 않을 것입니다. 나무의 뿌리 값을 전달한 다음 그 값을 처리하는 것이 좋습니다. 나는 또한 목록을 전달하고 그 위에 값을 추가하지 않을 것입니다. 스택 된 반환 호출을 통해 목록 값을 작성하는 것이 더 바람직하다고 생각합니다.

BST를 어떻게 정의했는지에 따라 한 가지 기능을 사용하여 문제에 대한 간단한 해결책을 작성했습니다. 데이터 구조가 없으므로 아직 테스트하지 않았으므로 버그가 있는지 알려주십시오.

+0

예 좋습니다. 하지만 자기는 나를위한 마디와 같습니다 ... 왜냐하면 저는 그것을 수업에서 사용하기 때문입니다. – Andre

+0

그런 다음 전화 할 때 자기 자신을 전달하십시오. 이런 식으로 반환 호출을 쌓는 것이 결과를 추가하는 것보다 옳고 기본값이 해킹 (hash)되기 때문에 위에 설명한 것과 반대로이 함수를 사용해야합니다. –

관련 문제