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

时间:2015-08-31 16:51:16

标签: 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

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

point 1 reached; point 2 reached; point 1 reached; point 3 reached. point 0 reached.

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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您在read_file.readline().rstrip() 分支中缺少return语句。对if的调用刚执行,其返回值被忽略,然后函数继续,并在partition终止后返回-1

要解决此问题,只需添加if电话:

return