递归与循环的区别

来源:互联网 发布:js特效 编辑:程序博客网 时间:2024/05/20 18:16
理论上而言,所有递归程序都可以用非递归程序来实现。循环方法是所有递归到非递归的转换中最理想的方法,可以将开销减少到最小。不过也是分析起来最复杂的,对于简单的递归可以用这样的方法来处理。为了理解方便,下面是用一个最简单的例子:求N的阶乘。递归的方法:int Factorial(int n){    if( n > 1){       return n*Factorial(n-1);//递归函数调用    }    else if(n == 1){       return 1;  //递归出口    }     else{       return ERROR;//报告输入错误    }} 转为非递归的方法:Factorial(int n){   int k = 1 ;//增量   int t = 1 ;//临时结果   while(k!=n){      t*=k;      k++;   }   return t;

}

递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统栈溢出。

0 0