斐波那契数列第n数是什么的实现

对该队列先有个印象: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

        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;

}

你可能感兴趣的:(斐波那契数列第n数是什么的实现)