函数调用自身称为递归(Recursion),在计算机科学指将问题分解为同类的子问题来解决的方法。

分治(Divide and Conquer),指将问题分而治之,通过分成多个子问题来简化求解,最终将子问题的解合并成原问题的解。

递归

递归的一般形式如下:

int func(传入数值) {
  if (终止条件) return 最小子问题解;
  return func(缩小规模);
}

比如使用递归来实现快速排序:

void quickSort(int a[], int left, int right) {
    if(left >= right) {
        return;
    }
    int mid = partition1(a, left, right);
    quickSort(a, n, left, mid-1);
    quickSort(a, n, mid+1, right);
}


分治

递归&分治应用:

汉诺塔问题。

  • 无标签