如何修复数独解算器c#的堆栈溢出错误?与递归函数有关系吗?

如何修复数独解算器c#的堆栈溢出错误?与递归函数有关系吗?,c#,algorithm,recursion,stack-overflow,sudoku,C#,Algorithm,Recursion,Stack Overflow,Sudoku,我正在尝试制作一个数独解算器。每当我尝试运行它时,它都会给我一个堆栈溢出错误: System.StackOverflowException:'引发了'System.StackOverflowException'类型的异常。' 我相信这可能与solve函数调用FindEmpy函数太多有关 非常感谢您的帮助 非常感谢 使用系统; 命名空间sudokusolver { 班级计划 { 静态公共空白打印板(int[][]bo) { for(int i=0;i

我正在尝试制作一个数独解算器。
每当我尝试运行它时,它都会给我一个堆栈溢出错误:

System.StackOverflowException:'引发了'System.StackOverflowException'类型的异常。'

我相信这可能与solve函数调用FindEmpy函数太多有关
非常感谢您的帮助
非常感谢

使用系统;
命名空间sudokusolver
{
班级计划
{
静态公共空白打印板(int[][]bo)
{
for(int i=0;i

静态公共布尔解算(int[][]bo)
{
int x;
int-y;
if(FindEmpty(bo)=(100100))
{
返回true;
}
其他的
{
y=FindEmpty(bo)。第1项;
x=最终空(bo)。第2项;
}
-对于(int i=0;i<10;i++)
+对于(int i=1;i<10;i++)
{
if(IsValid(bo,i,x,y)=真)
{
bo[y][x]=i;
如果(求解(bo)=真)
{
返回true;
}
其他的
{
bo[y][x]=0;
}
}
}
返回false;
}

在某个时刻,
IsValid(bo,0,x,y)
返回true,因此您将永远用另一个零替换零。

老实说,我不确定您的解算器是如何工作的,但我以前做过一个数独解算器。我也收到了堆栈溢出,当解算器永远无法解决这个难题,因此程序陷入了无限循环。我的猜测是,你的解算器没有解出谜题,并且仍然被卡住,试图不起作用。这里唯一的错误是解算器没有解决所有或任何谜题。啊,这是由于
for(int i=0;i<10;i++)
,您被卡住了,无法用i==0(例如blank)替换第一个“blank”。出现此错误是因为您通过调用
solve
方法本身创建了一个无限循环。您必须更改此部分的算法。使用调试器:当StackOverflow发生时,查看callstack,它将告诉您无限循环是什么以及是谁造成的。例如,它将显示您的调用堆栈是Method1 M2 M3 M4 M3 M4 M4等等,这告诉您M3或M4可能由于故障中断条件而卡在无限循环中。然后你就可以加倍了