如何打破递归void方法?

时间:2014-06-09 02:20:18

标签: java recursion

我试图找出这个程序看似简单的问题。目标是使用递归方法按升序重新排列数组。我编写了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}的输出,这是正确的。但是,我希望这个过程继续进行,这样它们最终都会被排序。当我保留递归语句时,我得到了错误。

1 个答案:

答案 0 :(得分:3)

不要使用

recursiveSelectionSort(a, start++);

这样做会导致您首先将start传递给recursiveSelectionSort,然后然后增加开始。 <{1}}在每次递归调用中都会保持不变。

使用

start

或者如果你真的想增加recursiveSelectionSort(a, start+1); (即使没有理由这样做),请使用

start

先增加。