【发布时间】:2017-02-10 17:46:30
【问题描述】:
这是一个快速排序算法的简单递归函数,我没有在这个函数中找到return语句,所以最后一次递归后它不会清空堆栈吗?
void quicksort(int arr[], int p, int r){
int q = partition(arr, p, r);
if(p < r){
quicksort(arr,p, q-1);
quicksort(arr,q+1, r);
}
}
这个函数没有返回语句,所以递归函数会永远留在堆栈上还是会被清空?
【问题讨论】:
-
当
p >= r时递归结束。 -
在结束
}之前有一个隐含的return语句。一般来说,记住做蠢事的工具(语言、编译器)往往会很快消亡。 -
它是一个
void函数,所以它不会有任何返回值。此外,通常是清理堆栈的调用者代码而不是函数代码。最后,void函数的末尾总是有一个隐含的return;。
标签: c recursion stack quicksort void