今天做了好几个需要用到斐波那契数列求解的问题,我们都知道,可以使用递归的方法,也可以使用迭代,于是我两个都试了一次,发现结果如下:
递归:
public class Solution {
public int RectCover(int target) {
if(target <=0){
return 0;
}
if(target ==1||target ==2){
return target;
}
if(target>=3)
return RectCover(target-2)+RectCover(target-1);
return 0;
}
}
public int RectCover(int target) {
if(target <=0){
return 0;
}
if(target ==1||target ==2){
return target;
}
if(target>=3)
return RectCover(target-2)+RectCover(target-1);
return 0;
}
}
结果:消耗时间 -- 465 ms 占用内存 -- 8204 k
迭代:
public
class
Solution {
public
int
RectCover(
int
target) {
if
(target <=
0
){
return
0
;
}
if
(target ==
1
||target ==
2
){
return
target;
}
int
a=
1
,b=
2
,c=
1
;
for
(;target>=
3
;target--){
c =a;
a =b;
b +=c;
}
return
b;
}
}
结果:消耗时间 -- 10 ms 占用内存 -- 8404 k
虽然二者在空间上资源占用差不多 ,但是在运算时间上却有几十倍的差距 以为递归的每次调用 不会保存计算结果
而迭代每次参与计算的结果都是前一次计算的结果 所以时间上就会有很大的差距