递归:
直接或者间接调用自身的算法称为递归算法,用函数自身给出定义的函数称为递归函数。如计算阶乘、斐波那契数列。
#include<bits/stdc++.h>
using namespace std;
//递归
//阶乘
int factorial(int n){
if(n==0)
return 1;
return n*factorial(n-1);
}
//斐波那契数列
int fibonacci(int n)
{
if(n<=1)
return 1;
return fibonacci(n-1)+fibonacci(n-2);
}
int main()
{
int n;
cin>>n;
cout<<factorial(n)<<endl;
cout<<fibonacci(n)<<endl;
return 0;
}
分治算法:
将一个难以直接解决的大问题分割成一些规模比较小子问题,子问题之间相互独立且与原问题相同,解决这些子问题所得到的子问题的解后再合并,从而得到原问题的解。例如:二分查找,归并排序、棋盘覆盖问题。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+8;
//二分查找
int a[maxn];
int binary_chop(int n,int x){
int l = 0;
int r = n-1;
while(l <= r){
int mid