我无法弄清楚为什么每次运行递归算法后都会更改一个完全不相关的变量。绝对没有我以任何方式为该变量分配新值的地方,但是递归方法仍然运行并且变量被更改。
我写的程序正在播放连接四。它有一个“棋盘”对象,用于存储玩家筹码的位置,以及一种评估该人可以获得多少可能的连接四并为该配置分配分数的方法。
递归算法旨在找到最佳的筹码序列。它制作了董事会的副本。将芯片添加到几个可能的位置之一(因此递归)。和递归。一旦达到基本情况,它就会找到芯片的假设配置将获得的“分数”。当它退出算法时,它会选择给出最多点的路径。
问题是电路板的原始副本不断被覆盖?该程序是这样的。(广义)
int[] FindBestPath(Board OrginalBoard, int Depth)
{
Board TempBoard = OriginalBoard;
if(Depth > 0)
for(x of many possible modifications)
{
Tempboard.MakeModification(x);
Depth--;
Score = FindBestPath(TempBoard, Depth);
if(Score > highestScoreYet)
{
highestScoreYet = Score;
BestModification = x;
}
}
else if(Depth == 0)
Return new int[2] {ConfigurationScore(TempBoard), -1};
return new int[2] {HighestScoreYet, BestModification};
}
为什么当我实际调用递归算法时通过的“原始板”会以所有可能的方式得到修改“x”?我没有添加“参考”声明或任何东西,所以不应该保留原件吗?
关于对象行为和递归算法是否有一些已知的奇怪之处?我可以在 Microsoft C# Express 2010 中以某种方式在原始板对象被修改的当前未知时刻以某种方式断点吗?
谢谢你。