文章目录
第五章 分治思想与递归
5.1 阶乘
笔记
递归算法:从待求的未知项出发,逐次调用本身直到递归边界(即初始条件)。
代码实现
#include <iostream>
using namespace std;
int fact1(int n); //n!=1*2*3...*n
int fact2(int n); //n!=(n-1)!*n
int fact3(int n); //n!=n*(n-1)!
int main()
{
int n = 6;
int n1, n2, n3;
n1 = fact1(n);
n2 = fact2(n);
n3 = fact3(n);
cout << n1 << ","
<< n2 << ","
<< n3 << "," << endl;
return 0;
}
int fact1(int n)
{
int m = 1;
for (int i = 1; i <= n; i++)
m = m * i;
return m;
}
int fact2(int n)
{
int m[10];
m[1] = 1;
for (int i = 2; i <= n; i++)
m[i] = m[i-1] * i;
return m[n];
}
int fact3(int n)
{
int m;
if (n == 1)
m = 1;
else
m = n * fact3(n-1);
return m;
}
5.2 归并排序和快速排序
归并排序笔记
习惯使用左闭右开集合
代码实现
#include <iostream>
using namespace std;
void mergesort(int * array, int start, int end);
int main()
{
int cards[13] = {
101,112,109,107,202,209,
213,212,313,303,403,412,402};
mergesort(cards, 0, 13);//左闭右开
for (int i = 0; i < 13