递归与循环算法的比较

递归

递归就是方法自己调用自己 ,每次调用时传入不同的变量 。递归有助于编程者解决复杂的问题 ,同时可以让代码变得简洁。

循环

在满足条件的情况下,重复执行同一段代码 。

栗子

有一个我们很熟悉的栗子,斐波那契数列:

1,1,2,3,5,8,13,21........

设f(n)是第n个斐波那契数,

当n<=2,斐波那契数都为1;

当n>2,那么第f(n)个斐波那契数就等于前两个斐波那契数之和。 

递归实现

class Fib {
    public int fib(int n) {
        return f(n);
    }
    public int f(int n){
        if(n==0){
            return 0;
        }
        if(n==1){
            return 1;
        }
        return f(n-1) + f(n-2);
    }
}

 循环实现

class Fib {
    public int fib(int n) {
    	if(n==0){
    		return 0;
    	}
    	if(n==1){
    		return 1;
    	}
        int pre1 = 1;
        int pre2 = 0;
        int count = 2;
        int result = 0;
        while(count<=n){
        	result = pre1 + pre2;
        	pre2 = pre1;
        	pre1 = result;
        	count++;
        }
        return result;
    }
}

比较

递归循环
优点代码简洁、清晰,并且容易验证正确性。速度快,结构简单。
缺点

1、它的运行需要较多次数的函数调用,如果调用层数比较深,每次都要创建新的变量,需要增加额外的堆栈处理,会对执行效率有一定影响,占用过多的内存资源。

2、递归算法解题的运行效率较低。在递归调用的过程中系统为每一层的返回点、局部变量等开辟了栈来储存。递归次数过多容易造成栈溢出等

并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。

版权声明:本文为cx243698原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。