我需要找出数组之间最长的方式(从大到小)。 我试过编写recursive
函数,得到了java.lang.StackOverflowError
,但由于缺乏知识,我不明白为什么会发生这种情况。递归java堆栈溢出错误
首先,我初始化数组,并用随机数字填充:
public long[] singleMap = new long[20];
for (int i = 0; i < 20; i++) {
singleMap[i] = (short) random.nextInt(30);
}
于是,我试图找到掰着指头数最长的途径(例如{1,4,6,20, 19,16,10,6,4,7,6,1 ...})并返回计数这样的数字。
public int find(long[] route, int start) {
if (route[start] > route[start + 1]) {
find(route, start++);
} else {
return start;
}
return start;
}
所以这里的日志:
08-23 13:06:40.399 4627-4627/itea.com.testnotification I/dalvikvm: threadid=1: stack overflow on call to Litea/com/testnotification/MainActivity;.find:ILI
08-23 13:06:40.399 4627-4627/itea.com.testnotification I/dalvikvm: method requires 36+20+12=68 bytes, fp is 0x4189e318 (24 left)
08-23 13:06:40.399 4627-4627/itea.com.testnotification I/dalvikvm: expanding stack end (0x4189e300 to 0x4189e000)
08-23 13:06:40.400 4627-4627/itea.com.testnotification I/dalvikvm: Shrank stack (to 0x4189e300, curFrame is 0x418a3e88)
08-23 13:06:40.400 4627-4627/itea.com.testnotification D/AndroidRuntime: Shutting down VM
08-23 13:06:40.400 4627-4627/itea.com.testnotification W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41a8ed40)
08-23 13:06:40.414 4627-4627/itea.com.testnotification E/AndroidRuntime: FATAL EXCEPTION: main
Process: itea.com.testnotification, PID: 4627
java.lang.StackOverflowError
at itea.com.testnotification.MainActivity.find(MainActivity.java:46)
at itea.com.testnotification.MainActivity.find(MainActivity.java:46)
我明白任何解释,因为所有相关问题并没有帮助我。如果我的功能有问题,请纠正或解释。
编辑
我忘记说了,我用for
从每个 “点”
for (int i = 0; i < singleMap.length - 1; i++) {
int x = find(singleMap, i);
System.out.println("steps = " + x);
}
'开始++'返回start'的'原始值,并增加了1到'start' ** **之后。在++返回值之前,'++ start'在'start' **中加1。 –
你应该添加一个Log.i(“Start”,start.toString());到你的查找方法作为第一行,所以你看看会发生什么。 – Squirrelkiller