递归算法,简而言之就是一种函数调用函数自身来完成算法设计的方法。
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一指令进行重复执行,在每次执行这组指令时,都从变量的原值推出它的一个新值。
Fibonacci数列的递归实现:
int Fib(int n){
int fibn;
if(n==0)
fibn = 0;
else if(n == 1)
fibn == 1;
else
fibn = Fib(n-1) + Fib(n-2);
return fibn;
}
Fibonacci数列的迭代实现:
int Fib(int n){
int F1 = 0, F2 = 1, F3;
for(int i = 0; i <=n; i ++){
F3 = F2 + F1;
F1 = F2;
F2 = F3;
}
}
递归算法虽然强大,但是也不是万能的。从本质上来看,递归其实是方便了程序员却难为了机器。使用递归算法,只要得到了递归数学公式就能很方便地写出程序,程序可读性强,容易理解。但递归式用堆栈机制实现的,每深入一层递归,都要在内存中占去一块栈数据区域,这样一旦递归嵌套层数较深,计算机会力不从心,在空间上甚至会以内存崩溃而告终。即使能够完成递归计算,也会占据大量的内存空间,额外消耗大量的函数传递和函数调用资源。