private void mergesort(int low, int high) { //line 1
if (low < high) { //line 2
int middle = (low + high)/2 ; //line 3
mergesort(low, middle); //line 4
mergesort(middle+1, high); //line 5
merge(low, middle, high); //line 6
}} //line 7
我了解这样一个事实:当 if 语句为 false 时,您将退出方法/函数。例如,如果我打电话mergesort(0, 5)
在 main 方法中第一个mergesort(low, middle)
将运行3次并终止,然后程序将转到第7行。
我感到困惑的是为什么high
当程序返回时突然从0变成1mergesort(middle+1, high);
在第 5 行。
这是另一个类似但更简单的程序的示例
public static void recursionExample(int i){ //line 1
if(i < 3){ //line 2
recursionExample(i+1); //line 3
recursionExample(i-1); //line 4
} //line 5
} //line 6
这次如果我打电话recursionExample(0)
3号线的recursion(i+1);
会运行3次,直到if语句为假,然后会转到第6行,然后程序会转到第4行recursion(i-1);
然而,i
当它从第6行转到第4行时,突然从3变成2。这是我觉得最困惑的地方。为什么调用第二个递归方法时i会变成2。
关于你的第二个片段:
public static void recursionExample(int i){
if(i < 3){
recursionExample(i+1); // this is called for the last time when i==2, i.e. the
// last call is recursionExample(3). When that call
// returns, i is still equal 2, since calling
// recursionExample(i+1) doesn't change the value of the
// local variable i of the current method call
recursionExample(i-1); // Therefore when this line is first called, i is equal 2
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)