如何在没有转义序列的情况下停止递归
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 的不同组合,以及(部分)反向序列以在出错的情况下重新开始?
如何在 .NET Core 中将 JSON 序列化为没有转义字符的字符串?