Java循环方式实现斐波那契数列

前段时间笔试的时候遇到一个实现斐波那契数列的题目,瞬间蒙圈了,什么是斐波那契数列,回来后查了下才知道,原来斐波那契数列是这样的:(传送门),F(1)=1,F(2)=1,Fn=F(n-2)+F(n-1),n>2,网上也看了下大家的实现方式,我觉得还是不够好,于是自己动手写了一个,是基于for循环实现的,但是为了后续拓展,所以将数列使用数组保存了,同时增加了输出语句显示效果,具体代码如下:

public class Fibonacci {
	public static void main(String[] args) {
		getFib(15);
	}
	public static int getFib(int n) {
		//前置容错
		if(n<=0) {
			System.out.println("Error:-1");
			return -1;
		}
		//初始化
		int[] arr=new int[n<2?2:n];
		arr[0]=arr[1]=1;
		//因为第一二项必须初始化,所以不能和通项一样处理
		if(n==1||n==2) {
			System.out.print(n==1?arr[0]:(arr[0]+","+arr[1]));
		}else {
			//第一二项已经初始化了,先输出
			System.out.print(arr[0]+","+arr[1]+",");
			for(int i=2;in-2?arr[i]:(arr[i]+","));//输出运算后的结果,避免再循环输出
			}
		}
		return arr[n-1];//注意下标越界
	}
}

看下输出效果:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610

Q:为什么选择循环的方式实现?

A:我看了下其它博主的实现方式,基本就是递归和循环的方式,但是我们知道,其实递归在实际开发中很少用到,因为一旦我们的递归层数太高,会导致很高的内存占用;所以此处选择了循环的方式;

Q:你觉得相比于其它博主,你实现的方式有何优点及缺点?

A:相比于其它博主,他们并没有保存运算结果,也就是只求解他们需要的项,我保存了从第一项到第n项,这样如果将结果存储到类成员或者其他结构之中,方便下次寻找已经计算过的项;当然缺点也就很明显了,结束运算之后占用的内存会比较多。

你可能感兴趣的:(Java)