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

3
我正在尝试构建一个递归函数,如下所示:
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

我惊讶的是,在运行我的程序并调用这个函数后,编译器打印出以下内容:
point 1 reached; point 2 reached; point 1 reached; point 3 reached. point 0 reached.

这返回了导致整个程序逻辑崩溃的-1。我确定我错过了什么,但我的程序在if-else语句后如何跳转。据我所知,没有情况下if-statement不会被执行?

2个回答

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);
}

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

因此,想象一下您传入了将被递归调用一次的数据。第一次调用将进入if块,并进行递归调用。第二次调用将进入else块,并返回high。这将控制权传回初始调用,后者会丢弃第二个调用的结果,退出if语句,并返回-1。


0

你在 if 分支中缺少了一个 return 语句。调用 partition 只是被执行了,它的返回值被忽略了,然后函数继续执行,在 if 终止后返回 -1

要修复它,只需添加一个 return 调用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接