关于递归的问题

 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

回到顶部