关于递归的问题
void MergeSort(int low,int height){
int middle;
if(low<height)
{
middle = (low+height)/2;
printf("start %d\n",middle);
MergeSort(low,middle);
printf("one %d\n",middle);
MergeSort(middle+1,height);
printf("two %d\n",middle);
}
}
今天看递归排序的时候,看到这对递归产生了疑问,程序执行到了第一个MergeSort()
时,是停止执行继续执行重新进入函数执行,还是往下继续执行到结束在进入新的递归函数中。执行代码是
int main(){
MergeSort(0,4);
return 0;
}
跑出来的结果是这样的,不知道该怎么理解。
回答:
肯定是停止继续执行,执行递归函数,递归函数完毕后再重新进入函数执行
执行到第一个start
进入递归,又执行到start
又进入递归,又执行到start
进入递归,不满足if,退出,回到上一个递归,继续向下执行到one
执行递归,不满足if,退出,回到上一个递归,继续向下执行到two
.....
否则结果会是以下这样很有规律的输出:
start
one
two
start
one
two
回答:
middle的计算有bug。middle=((high-low)>>1) + low
.经典的Bu。
回答:
当然是停掉进栈啦,这个推荐看 计算机程序的构造和解释。
以上是 关于递归的问题 的全部内容, 来源链接: utcz.com/p/195296.html