对该队列先有个印象:0,1,1,2,3,5,8,13,21……
简单说就是下位数是前两位数之和。
写了三种实现,递归、尾递归与迭代,
递归方式奇慢又有栈溢出现象,
尾递归在java8中也并没有得到优化,栈溢出同样存在,
迭代才是王道,
代码如下:
1,递归:
public static Integer get(Integer c) {
if(c<=0)throw new IllegalArgumentException();
if(c==0 || c==1) {
return c;
}else {
return get(c-1) +get(c-2);
}
}
2,尾递归
public static Integer getByTail(Integer c) {
if(c<=0)throw new IllegalArgumentException();
if(c==1) return 0;
else if(c==2) return 1;
return getNest(0,1,3,c);
}
static Integer getNest(Integer first,Integer second,Integer index,Integer end) {
if(index<end
return getNest(second,first+second,index+1,end );
else
return first+second;
}
3,迭代
static Integer get2(Integer c) {
if(c<=0)throw new IllegalArgumentException();
if(c==1)return 0;
else if(c==2)return 1;
Integer first=0,second=1;
for(int i=3;i<=c;i++) {
second= first + (first=second);
}
return second;
}