在python中递归调用方法作为参数

时间:2017-12-04 19:51:54

标签: python recursion

我试图在python中编写一个递归函数,但它不返回整数类型,而是返回一个非类型。我知道还有其他一些问题,但对我来说没有一个解决方案。 这是代码:

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)     

1 个答案:

答案 0 :(得分:0)

您的递归方法(因为它出现在编辑过的问题中)正在做正确的事情,因为它在所有情况下都使用return

这意味着None值不能归因于递归函数本身,而是它在某个基础情况下返回的值。对于您的功能,这意味着board.evaluation()至少在某些时候会返回None

在Python 3中,我希望在任何递归情况下都会导致异常,因为minmax会阻塞None值(因为{ {1}}与任何事物都不具有可比性,包括其本身。然而,在Python 2中,所有对象都是可比较的,尽管在不同类型之间进行比较可能没有任何特定含义。默认行为是按字母顺序比较类名(因此所有Noneint实例都小于所有float实例,这些实例少于所有str s),但是如果我没记错,tuple比其他所有值都要小。