我有一个使用深度递归的算法。递归将进行多少层深度取决于输入。为避免堆栈溢出异常,我会计算深度并在特定深度处终止。
通过一些实验,我之前确定 500 水平是停止点。但是,现在我突然在 300 多级时遇到堆栈溢出异常。
谁能阐明哪些因素会对此产生影响?是不是例如中央处理器和内存?或者与计算机上正在运行的其他进程有关?
最佳答案
你得到一个 StackOverflowException
当堆栈空间用完时。调用方法会使用一些堆栈空间(称为堆栈帧),就像在该函数期间使用的局部变量一样。递归会不断添加新的堆栈帧,而不会弹出旧的堆栈帧(除非您正在使用尾调用优化,而 C# 在这方面做得不太好)。
因此,具体发生时间取决于方法调用的次数以及您在这些方法中所做的事情。
关于.net - .NET 中哪些因素导致堆栈溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892215/