为什么Java在我的return语句后跳转

Bul*_*ula 3 java recursion

我正在尝试构建一个递归函数,如下所示:

private static int partition(int[] array, int low, int high, int pivot_index){

  // just irrelevant code

  System.out.println("Somehow this point has been reached 1");
  if(low < high){
    System.out.println("Somehow this point has been reached 2");
    //some more code
    partition(array,low,high,pivot_index);
  }else{
    System.out.println("Somehow this point has been reached 3");
    //some more code
    return high;
  }
 System.out.println("Somehow this point has been reached 0");
 return -1;    

}//partition
Run Code Online (Sandbox Code Playgroud)

令我吃惊的是,在运行我的程序并调用此函数后,编译器将打印:

point 1 reached; point 2 reached; point 1 reached; point 3 reached. point 0 reached.
Run Code Online (Sandbox Code Playgroud)

哪个返回-1会导致程序的整个逻辑崩溃.我确信我在这里遗漏了一些东西但是我的程序在if-else声明之后如何跳转.据我所知,if-statement没有执行的情况没有?

res*_*man 9

如果if条件为真,则不会立即返回.在调用之后partition,它将退出if语句,并继续结束.

如果要返回递归计算的值,则需要将其更改为

if(low < high){
    System.out.println("Somehow this point has been reached 2");
    //some more code
    return partition(array,low,high,pivot_index);
}
Run Code Online (Sandbox Code Playgroud)

现在,它只是丢弃递归的结果,并返回失败值.您需要明确表示要返回该值.

因此,假设您传递的数据将以递归方式调用一次.第一个调用将进入该if块,并进行递归调用.第二个调用将进入该else块,然后返回high.这会将控制权传递回初始调用,该调用将丢弃第二个调用的结果,退出if语句,并返回-1.