递归的弊端:
关于递归虽然表面看起来很简洁,明了。例如最常见的斐波那契函数用递归实现,具体代码如下:
public class DiGuiTest {
/**
* 递归实现斐波那契函数
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(DiGui(6));
}
public static int DiGui(int n){
if(n==1 || n==2)
return 1;
else
return DiGui(n-1)+DiGui(n-2);
}
}
其实也是有他的弊端的,递归在完成最后的运算时,返回值会再次重新倒着递归一次。因为执行过程是函数f(n)执行到下一个f(n),再执行到下一个f(n).......所以返回的时候也是从最好一个f(n)返回,然后再从倒数第二个f(n)返回。因为计算机底层记录了你的执行过程,所以才会倒着递归返回值。因此递归是比较费时的。上面的例子从45开始我的电脑就明显输出值就慢了。因此递归最好用迭代来实现,提高效率。
至于上面大家可以在最后的return上面加断点,逐步执行,观察返回值的过程就能看到上面所说的情况。
|
|