如何在没有转义序列的情况下停止递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有转义序列的情况下停止递归相关的知识,希望对你有一定的参考价值。

在quicksort算法的代码中,有递归的用法,没有转义序列,但是递归停止并且代码完成直到结束。我已经找到了该算法的许多代码示例,但是有了转义序列,并且没有一个并且仍然可以使用。

我已经尝试将所有内容写在纸上,但是找不到递归停止的原因,因此函数会永远递归继续,

  /* C implementation QuickSort */
  #include<stdio.h> 

  // A utility function to swap two elements 

    void swap(int* a, int* b) 
    { 
      int t = *a; 
      *a = *b; 
      *b = t; 
    } 

  /* This function takes last element as pivot, places 
   the pivot element at its correct position in sorted 
    array, and places all smaller (smaller than pivot) 
   to left of pivot and all greater elements to right 
   of pivot */

     int partition (int arr[], int low, int high) 
    { 
      int pivot = arr[high];    // pivot 
      int i = (low - 1);  // Index of smaller element 

    for (int j = low; j <= high- 1; j++) 
    { 
        // If current element is smaller than the pivot 
        if (arr[j] < pivot) 
        { 
            i++;    // increment index of smaller element 
            swap(&arr[i], &arr[j]); 
        } 
    } 
    swap(&arr[i + 1], &arr[high]); 
    return (i + 1); 
  } 

  /* The main function that implements QuickSort 

     arr[] --> Array to be sorted, 
     low  --> Starting index, 
     high  --> Ending index */

      void quickSort(int arr[], int low, int high) 
     { 
       if (low < high) 
      { 
        /* pi is partitioning index, arr[p] is now 
           at right place */
        int pi = partition(arr, low, high); 

        // Separately sort elements before 
        // partition and after partition 
        quickSort(arr, low, pi - 1); 
        quickSort(arr, pi + 1, high); 
       } 
      } 

  /* Function to print an array */

    void printArray(int arr[], int size) 
    { 
     int i; 
     for (i=0; i < size; i++) 
        printf("%d ", arr[i]); 
     printf("n"); 
    } 

//用于测试以上功能的驱动程序

int main() 
{ 
int arr[] = {10, 7, 8, 9, 1, 5}; 
int n = sizeof(arr)/sizeof(arr[0]); 
quickSort(arr, 0, n-1); 
printf("Sorted array: n"); 
printArray(arr, n); 
return 0; 
} 

在我看来,功能会卡在quickSort(arr,low,pi-1);即使位置pi-1上的参数达到0也会继续但显然没有。并且arr最终被排序为1 5 7 8 9 10

答案

[您的基本情况是当(low

以上是关于如何在没有转义序列的情况下停止递归的主要内容,如果未能解决你的问题,请参考以下文章

如何在不停止递归的情况下返回递归函数中的值?

递归:如何尝试整数 1 到 9 的不同组合,以及(部分)反向序列以在出错的情况下重新开始?

递归序列python

如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?

在没有 PreparedStatement 的情况下如何正确转义字符串?

如何在没有转义字符和单引号的情况下在 Groovy 中编写属性文件?