递归
递归就是方法自己调用自己 ,每次调用时传入不同的变量 。递归有助于编程者解决复杂的问题 ,同时可以让代码变得简洁。
循环
在满足条件的情况下,重复执行同一段代码 。
栗子
有一个我们很熟悉的栗子,斐波那契数列:
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版权协议,转载请附上原文出处链接和本声明。