开发者社区 问答 正文

关于递归的问题

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

screenshot

展开
收起
a123456678 2016-06-08 21:24:21 1953 分享 版权
1 条回答
写回答
取消 提交回答
  • 肯定是停止继续执行,执行递归函数,递归函数完毕后再重新进入函数执行
    执行到第一个start
    进入递归,又执行到start
    又进入递归,又执行到start
    进入递归,不满足if,退出,回到上一个递归,继续向下执行到one
    执行递归,不满足if,退出,回到上一个递归,继续向下执行到two
    .....

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

    2019-07-17 19:32:46
    赞同 展开评论
问答地址: