我正在编写代码来解决问题,并且它适用于较小的输入,但是当增加到较大的输入时,我遇到了堆栈溢出异常:
Stack overflow.
Repeat 3239 times:
--------------------------------
at Program+<>c__DisplayClass0_0.<<Main>$>g__Traverse|3(Point, Direction)
--------------------------------
at Program.<<Main>$>g__Do|0_0()
Run Code Online (Sandbox Code Playgroud)
我还注意到,它声称重复的次数因执行而异,有时我也会得到 ~2300 次重复或 ~2800 次重复。
经过一段时间的调试后,我没有发现代码有任何问题,因此我手动将线程的堆栈大小设置为Int32.MaxValue,代码工作并产生了正确的答案。
我很好奇是否有人知道 C# 如何检测堆栈溢出?在这种情况下,在我看来,C# 过早地预测了堆栈溢出,即使程序确实有机会终止。
此外,为什么 C# 会给出堆栈溢出错误,指出调用已重复x多次,而x每次执行似乎都不同?
任何见解或信息表示赞赏!