我正在尝试构建一个递归函数,如下所示:
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
没有执行的情况?
答案 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