我是编程新手,请为我解释以下递归函数的工作原理。该函数被递归调用两次,第一次递归调用之后的语句是否会执行?
void sort(int low, int high) {
int mid;
if(low < high) {
mid = (low + high) / 2;
sort(low, mid);
sort(mid+1, high);
merging(low, mid, high);
} else {
return;
}
}
void main()
{
sort(0, 10);
}
答案 0 :(得分:0)
请参阅堆栈溢出的递归示例链接。 Examples of Recursive functions
您试图在代码中实现什么?递归函数应调用函数本身,并且应具有停止条件,否则它将陷入无限循环。您编写的代码两次调用了相同的函数,这是不正确的。您应该在停止条件下调用一次该函数。
答案 1 :(得分:0)
让我们逐行走
if(low < high)
行开始,由于0 <10,所以中间将是5:因为mid = (low + high) / 2;
。sort(mid+1, high);
会再次被调用,因为低= 1,高也= 1。将其视为堆栈,首先按sort(0,10)
然后=> sort(0,5)
然后=> sort(0,2)
然后=> sort(0,1)
然后=> sort(0,0)
>
现在,由于sort(0,0)
执行完毕,它将从堆栈中删除,并且sort(0,1)
将继续执行。
所以它应该看起来像这样
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
在sort(0,1)
的第五行中,对sort()
的调用在那里,因此将再次将排序推入该堆栈:
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
=> sort(1,1)
此操作将继续进行,最后对sort(0,10)
的调用将完成执行,您将获得所需的结果。