2017-12-04 6 views
0

파이썬에서 재귀 함수를 작성하려고하지만 정수 유형을 리턴하는 대신 비 유형을 리턴합니다. 나는 거기에 다른 질문이 있지만 거기에 하나의 해결책이 나를 위해 일한 것은 아니라는 것을 압니다. 그것의 모든 경우에 return을 사용하기 때문에, 옳은 일을하고있다 (이 편집 질문에 나타나는)파이썬에서 인수로 재귀 호출하기

class t: 
def search(self, globina, board): 
    board.legals = board.legal() 
    bestMove = 0 
    if(globina == 0): 
     return board.evaluation() 
    elif board.turn == False: 
     bestMove = -9999 
     for i in range(0, len(board.legals)): 
      board.move(board.legals[i]) 
      board.display() 
      bestMove = max(bestMove, self.search(globina-1, board)) 
      board.undo() 
     return bestMove 

    else: 
     bestMove = 9999 
     for i in range(0, len(board.legals)): 
      board.move(board.legals[i]) 
      board.display() 
      bestMove = min(bestMove, self.search(globina-1, board)) 
      board.undo() 
     return bestMove 
z = t() 
z.search(globina, board)  
+2

이 코드는 심지어 'IndentationError'를 실행하지 않습니다. –

+0

globina! = 0이면 아무 것도 반환하지 않을 가능성이 높습니다. –

+0

@AmitTripathi 제 생각에 그는 질문에서 올바르게 생성하지 않았다고 생각합니다. 어쩌면 그는 편집장에게 출력물을 얻었 기 때문에 편집자가 적절하게 처리했을 수도 있습니다. –

답변

0

귀하의 재귀 적 방법 다음은 코드입니다.

즉, None 값은 재귀 함수 자체가 아니어야하며 어딘가 기본 사례에서 반환되는 값입니다. 귀하의 기능을 위해서는 board.evaluation()가 최소한 None을 반환해야 함을 의미합니다.

파이썬 3에서, 나는 그 min으로, 재귀 호의 어느 하나에 해당하는 경우에는 예외가 발생하는 기대와 (None 자체를 포함하여 아무 것도 비교할 수 없습니다 때문에) maxNone 값에 질식 것입니다. 그러나 Python 2에서는 모든 객체가 비교 가능합니다. 단, 서로 다른 유형 간의 비교는 특별한 의미가 없습니다. 기본 동작은 알파벳순으로 클래스 이름을 비교하는 것입니다. 따라서 intfloat 인스턴스는 모두 str 인스턴스보다 작습니다.이 인스턴스는 모두 tuple보다 작지만, 정확하게 기억하면 None은 다른 모든 값보다 적게 비교됩니다.