c - 这些是等价的吗?

标签 c recursion quicksort mergesort

归并排序快速排序的主函数中,我们使用以下内容进行递归

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();

}

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

最佳答案

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

尝试这样检查。

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

关于c - 这些是等价的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38887109/

相关文章:

python - 树中的递归

node.js - 通过 Node 请求包递归使用 async/await

javascript - 试图在不制作 2 个新列表和附加的情况下编写快速排序算法,无法找出问题所在

C:简单的HTTP服务器。读取本地文件并从浏览器下载

c - 给定一个指针,找到它所在的堆 block

php - 使用php遍历递归数据库表

algorithm - 快速排序最坏情况

java - 在 Java 中使用多线程并行化快速排序

python - 在 Python 中加速矩阵 vector 乘法和求幂,可能通过调用 C/C++

c - 警告 : format ‘%d’ expects argument of type ‘int’ , 但参数 2 的类型为 ‘int *’