一、穷竭搜索
1.递归函数
(1)阶乘的递归。
int fact(int n){
if(n==0) return 1;
return n*fact(n-1);
}
在递归时一定要有终止条件,此处为n==0;
(2)斐波那契数列的优化。
未优化的为:
int fib(int n){
if(n<=1) return n;
return fib(n-1)+fib(n-2);
}
由于fib(n)不会变化,可以通过开一个数组记录下前面记录的n的值来减少计算量。
优化后为:
int memo(MAXN+1);
int fib(int n){
if(n<=1) return n;
if(memo[n]!=0) return memo[n];
return memo[n]=fib(n-1)+fib(n-2);
}
这种方法是出于动态规划与记忆化搜索。
2.栈
头文件为stack支持push与pop。LIFO模式last in first out,后进先出。访问队顶元素用top。
#include <cstdio>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
printf("%d\n",s.top());
s.pop();
printf("%d\n",s.top());
s.pop();
printf("%d\n",s.top());
s.pop();
return 0;
}
3.队列
队列也支持pop与push操作,但是跟栈不一样,最初放入的最先取出。头文件为queue。
#include <cstdio>
#include <queue>
using namespace std;
int main()
{
queue<int> que;
que.push(1);
que.push(2);
que.push(3);
printf("%d\n",que.front());
que.pop();
printf("%d\n",que.front());
que.pop();
printf("%d\n",que.front());
que.pop();
return 0;
}
4.深度优先搜索