最近在求解一个带约束条件的路径问题。用的A*算法,可是编程的时候发现,明明思路逻辑没有问题,但是运行的时候总报奇怪的错误。比如:
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.UTF_8$Encoder.encodeLoop(UTF_8.java:691)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)
当时一脸懵逼,这都是啥,怎么堆栈会溢出。。各种百度,各种可能出错的地方都试了,还是不行,终于看到一篇博客,上面写着是递归过多的原因。我自己写了代码试了一下,果然如此。具体看代码。
public class Main {
static int count=1;
public static void testRecurise()
{
while(count<10000){
System.out.println("函数运行了"+String.valueOf(count)+"次");
count++;
testRecurise();
}
}
public static void main(String[] args) {
// write your code here
testRecurise();
System.out.println("执行其余的代码");
}
}
运行结果如图所示
总结一下,尽量用循环而不用递归。