递归如何在以下程序中起作用?

时间:2015-04-28 09:31:10

标签: recursion

/* Head ends here */
void quickSort(int ar_size, int *  ar) 
{
  int i, j, t;
  int pivot = 0;
  if((ar_size == 0) || (ar_size == 1)) 
  {
    return;
  }

  int A[1000], B[1000], s1 = 0, s2 = 0;
  for(i = 1; i < ar_size; i++)
  {
    if(ar[i] <= ar[pivot]) 
    {
      A[s1++] = ar[i];
    }
    else 
    {
      B[s2++] = ar[i];
    }
  }

  quickSort(s1, A);
  quickSort(s2, B);

  t = ar[pivot];

  for(i = 0; i < s1; i++) 
  {
    ar[i] = A[i];
  }
  ar[i] = t;

  for(i = 0; i < s2; i++)
  {
    ar[s1 + i +1] = B[i];
  }

  for(i = 0; i< ar_size; i++)
  {
    printf("%d ", ar[i]);
  }

  printf("\n");
}

/* Tail starts here */
int main() 
{
  int _ar_size;

  scanf("%d", &_ar_size);

  int _ar[_ar_size], _ar_i;

  for(_ar_i = 0; _ar_i < _ar_size; _ar_i++) 
  { 
    scanf("%d", &_ar[_ar_i]); 
  }

  quickSort(_ar_size, _ar);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您想了解quicksort的工作原理。我建议你看一下this video

现在关于递归。这个想法很简单。你有一个功能,可以执行特定的功能,但在它自己调用的过程中。一个很好的例子是数字的阶乘。

int factorial(int x)
{
    if(x = 0)
        return 1;

    return x * factorial(x - 1);
}

所以如果我打电话给factorial(4);我会得到的 factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * 2 * factorial(1) = 4 * 3 * 2 * 1 * factorial(0) = 4 * 3 * 2 * 1 * 1 = 24