Java - 之后会删除递归函数中类变量的更改吗?

时间:2017-12-19 13:07:09

标签: recursion minimax

我正在尝试实现minimax算法。

对于那些不熟悉的人:2个对手的递归函数(每个都有自己的转向。例如国际象棋,去等),它计算出什么是最好的举动对于玩家的每个回合,通过递归计算玩家A的选定动作的结果,反之亦然。

它被称为Minimax,因为第一个玩家总是试图最大化他的结果,而第二个玩家总是试图最小化第一个结果[这也意味着最大化他的结果])

调用该函数的玩家类具有棋盘(这是另一个类)。 玩家通过在棋盘上放置一个棋子进行游戏,并且还有另一个功能来计算得分/启发式得分。

我的问题如下:在计算每个玩家的结果时,我需要将棋子放在棋盘上,然后进行所有计算。一旦我再次上传递归树,我的更改是否会被删除?

我觉得它不会,因为即使Java通过值传递,我仍然改变了Player的表。所以我想知道我是否应该每次复制我当前的电路板并虚拟播放/通过电路板作为参数/等等......

1 个答案:

答案 0 :(得分:0)

  

我觉得它不会,因为即使Java通过值传递,我仍然会改变玩家的表格。所以我想知道我是否应该每次复制我当前的电路板并虚拟播放/通过电路板作为参数/等等......

这是一个选择。另一种解决方案(计算效率通常更高)是实现并使用undo()函数来反转移动对电路板的影响。