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