一 两种算法思想的根本区别
递归:自己调用自己,一定要有递归出口,算法思想在于将难以解决的大问题分解成已有答案的无数小问题,而小问题就是递归的出口,解决问题的思路在于从中心向边界条件逼近
递推:递推的算法思想其实是从小到大,用已知的条件,推出下一个已知的条件,一步一步,思路与递归相反,是边界向中心靠拢`
二两种算法思想的选择
递归算法的难点是递归关系,递归的代码往往简单清晰明了,但是由于不断递归调用需要很大的栈内存,及其容易造成栈内存的溢出
递推算法的代码相对繁琐,但是递推的思路却和人的思考方式更接近,从已知推未知,所以相对来说递推的代码更容易看懂
三 两种算法的经典例题
斐波拉契函数:
f(n)=f(n-1)+f(n-2)
即一个数等于前两个数之和
斐波拉契函数为递推与递归公式的经典应用,很多由递归和递推方法解开的算法题本质都是斐波拉契函数,
1 斐波拉契函数的两种算法求解
递推算法
int[] f = new int[100];
f[0] = 1;
f[1] = 1;
for (int i = 2; i < f.length; i++) {
f[i] = f[i-1] + f[i-2];
}
System.out.println(f[17]);