【问题标题】:Are these equivalent?这些是等价的吗?
【发布时间】:2016-08-11 04:07:58
【问题描述】:

merge sortquicksort的主函数中,我们使用以下递归

mergesort(int * arr, int low, int high){

if(low<high){
        //mergesort();
        //mergesort();
        //merge();
    }
}

但是,我使用了它的替代方法,即:

mergesort(int * arr, int low, int high){

if(low==high){
return;
} 
//mergesort();
//mergesort();
//merge();

}

我相信只要低等于高,递归就会停止。并将开始执行之前调用的工作。 但它没有这样工作! 知道为什么吗?

【问题讨论】:

  • 为什么不在调试器中运行程序并查看lowhigh 值?当你这样做时,答案应该很快就会变得明显。
  • 显示递归调用的参数。

标签: c recursion quicksort mergesort


【解决方案1】:

在您的第一部分代码中,如果块仅在低小于高时起作用。因此,如果您想重写检查,您需要确保当 low 等于或大于 high 时,您的函数应该停止递归调用。

尝试像这样检查。

if(low>=high){   //you have to check if low becomes greater or equal to high too!
    return;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2013-02-24
    相关资源
    最近更新 更多