递归与迭代
递归与迭代
递归
- 优点:大问题转化为小问题,减少代码量,同时代码精简,可读性强
- 缺点:递归浪费空间,而且递归太深容易造成堆、栈溢出。
迭代
- 优点:代码运行效率好,因为时间只随循环次数增加而增加,而且没有额外的空间开销
- 缺点:代码不如递归简洁,可读性不好
例题
编程题:有n步台阶,一次只能上1步或2步,共有几种走法?
解析:
-
n=1 ->一步 ->f(1) = 1
-
n=2 ->一步一步/直接2步 ->f(2) = 2
-
n=3 ->先到f(1),然后从f(1)直接到f(2) ->f(3) =f(1) + f(2)
先到f(2),然后从f(2)跨1步 -
n=4 ->先到f(2),然后从f(2)直接跨2步 ->f(4) =f(2) + f(3)
先到f(3),然后从f(3)跨1步 -
···
-
n=x ->先到f(x-2),然后从f(x-2)直接跨2步 ->f(x) =f(x-2) + f(x-1)
先到f(x-1),然后从f(x-1)跨1步
答案
递归
public int f(int n){
if(n<1){
throw new IllegalArgumentException(n+"不能小于1");
}
if(n==1 || n==2){
return n;
}
return f(n-2)+f(n-1);
}
循环迭代
public int loop(int n){
if(n<1){
throw new IllegalArgumentException(n+"不能小于1");
}
if(n==1 || n==2){
return n;
}
int one = 2;
int two = 1;
int sum = 0;
for(int i = 3; i<= 3; i++){
sum = one + two;
two = one;
one = sum;
}
return sum;
}

浙公网安备 33010602011771号