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