一递归算法
1递归的概念:直接或间接调用自身的算法成为递归算法。
2递归涉及的问题:斐波那契数列1 1 2 3..即从第三项开始每一项都是前两项的和
例1 阶乘函数
可递归地定义为:
其中
n=0时,n!=1为边界条件
n>0时,n!=n(n-1)!为递归方程
边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限次计算后得出结果
例2 Fibonacci数列
无穷数列1,1,2,3,5,8,13,21,34,55,…,被称为Fibonacci数列。它可以递归地定义为:
int fibonacci(int n)
{
if (n <= 1)
return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
二分治算法
1.分治算法的概念:分治法的意思就是,分而治之。即把一个问题,拆分成几个小问题,分别求解,再汇这些小问题的解,得到总问题的解。注意:该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
2.考试内容:
大整数的乘法
对于大整数的乘法我之前写过一个代码,不过不是分治算法,当n数位乘n位数时,时间复杂度为n方,效率低。
注:要想降低时间复杂度必须减少乘法次数。
考试内容:用分治算法手算例如1234*5678这种式子
棋盘覆盖
基础:整数划分http://blog.csdn.net/myloveprogrmming/article/details/78548249