我试图找出这个程序看似简单的问题。目标是使用递归方法按升序重新排列数组。我编写了main方法以及递归方法,如下所示。问题在于,出于某种原因,我无法阻止该方法,尽管有条件阻止它继续下去。
import java.util.Arrays;
public static void main(String[] args){
int[] a = {9,8,7,6,1,2,5,4};
recursiveSelectionSort(a, 0);
System.out.println(Arrays.toString(a));
}
public static void recursiveSelectionSort(int[] a, int start){
int minpos, temp;
//this condition is meant to stop the method
if (start==(a.length-1))
return;
minpos = start;
for (int i = start; i < a.length; i++) {
if (a[i] < a[minpos])
minpos = i;
}
temp = a[start];
a[start] = a[minpos];
a[minpos] = temp;
//this line causes the stack overflow error
recursiveSelectionSort(a, start++);
}
当我删除recursiveSelectionSort(a,start ++)语句时,我得到{1,8,7,6,9,2,5,4}的输出,这是正确的。但是,我希望这个过程继续进行,这样它们最终都会被排序。当我保留递归语句时,我得到了错误。
答案 0 :(得分:3)
不要使用
recursiveSelectionSort(a, start++);
这样做会导致您首先将start
传递给recursiveSelectionSort
,然后然后增加开始。 <{1}}在每次递归调用中都会保持不变。
使用
start
或者如果你真的想增加recursiveSelectionSort(a, start+1);
(即使没有理由这样做),请使用
start
先增加。