算法之美-递归与迭代

其实递归最大的有点就是把一个复杂的算法分解成若干相同的可重复的步骤。所以,使用递归实现一个计算逻辑往往只需要很短的代码就能解决,并且这样的代码也比较容易理解。但是,递归就意味着大量的函数调用。函数调用的局部状态之所以用栈来记录的。所以,这样就可能浪费大量的空间,如果递归太深的话还有可能导致堆栈溢出。

接下来分析迭代。其实,递归都可以用迭代来代替。但是相对于递归的简单易懂,迭代就比较生硬难懂了。尤其是遇到一个比较复杂的场景的时候。但是,代码的难以理解带来的有点也比较明显。迭代的效率比递归要高,并且在空间消耗上也比较小。

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。

能用迭代的不要用递归,递归调用函数不仅浪费空间,如果递归太深的话还容易造成堆栈的溢出。

public class diguiDiedai {
public static void main(String[] args) {
int n =10;
diguijiec(n);//递归
fib(n);//递归

//迭代求阶乘
int j=1;
for(int i=2;i<10;i++) {
j=j*i;
}
//迭代求fib数列
int total = 0;
int A =1;
for(int i=0;i<19;i++) {
int temp = total;
total = total+A;
A=temp;
}


}

private static int fib(int n) {
// TODO Auto-generated method stub
if(n==0) {
return 0;
}if(n==1) {
return 1;
}else {
return fib(n-1)+fib(n-2);
}

}

private static int diguijiec(int n) {
// TODO Auto-generated method stub
if(n==1) {
return 1;
}
return diguijiec(n-1)*n;
}
}