首页 > 关于递归的问题

关于递归的问题

 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;
}

跑出来的结果是这样的,不知道该怎么理解。


当然是停掉进栈啦,这个推荐看 计算机程序的构造和解释。


middle的计算有bug。middle=((high-low)>>1) + low
.经典的Bu。


肯定是停止继续执行,执行递归函数,递归函数完毕后再重新进入函数执行
执行到第一个start
进入递归,又执行到start
又进入递归,又执行到start
进入递归,不满足if,退出,回到上一个递归,继续向下执行到one
执行递归,不满足if,退出,回到上一个递归,继续向下执行到two
.....

否则结果会是以下这样很有规律的输出:
start
one
two
start
one
two

【热门文章】
【热门文章】