最近在求解一個帶約束條件的路徑問題。用的A*算法认罩,可是編程的時候發(fā)現(xiàn)皱蹦,明明思路邏輯沒有問題,但是運行的時候總報奇怪的錯誤诀紊。比如:
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)
當(dāng)時一臉懵逼谒出,這都是啥,怎么堆棧會溢出邻奠。笤喳。各種百度,各種可能出錯的地方都試了碌宴,還是不行杀狡,終于看到一篇博客,上面寫著是遞歸過多的原因贰镣。我自己寫了代碼試了一下呜象,果然如此。具體看代碼碑隆。
public class Main {
static int count=1;
public static void testRecurise()
{
while(count<10000){
System.out.println("函數(shù)運行了"+String.valueOf(count)+"次");
count++;
testRecurise();
}
}
public static void main(String[] args) {
// write your code here
testRecurise();
System.out.println("執(zhí)行其余的代碼");
}
}
運行結(jié)果如圖所示
總結(jié)一下恭陡,盡量用循環(huán)而不用遞歸。