斐波那契数列

    科技2022-07-13  114

    斐波那契数列

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1),n<=39 。

    分析

    斐波那契数列公式:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2),(n>=3,n∈N*);

    递归法

    递归是最简单的实现方式,但是递归的缺点是不考虑时间复杂度和内存问题。

    代码

    public int Fibonacci1(int n){ if(n <= 1){ return n; } return Fibonacci1(n-1) + Fibonacci1(n-2); }

    优化递归

    递归会重复计算大量的数据,既占用大量内存又耗费时间,优化递归的第一种方式是以内存换取时间,用数组将数列存起来,时间更快,但是内存会变大。

    优化代码一

    public int Fibonacci2(int n){ int[] ans = new int[40];//n<=39,一共40个数; ans[0] = 0; ans[1] = 1; for(int i = 2; i <= n; i++){ ans[i] = ans[i-1] + ans[i-2]; } return ans[n]; }

    优化存储

    将数列存储到数组后,虽然减少了递归耗费的大量时间,但却耗费了大量的内存,现将数组去掉继续对代码进行优化,减少占用的内存。

    优化代码二

    public int Fibonacci3(int n){ if(n <= 1){ return n; } int sum = 1; int one = 0; for(int i = 2; i <= n; i++){ sum = sum + one; one = sum - one;//很巧妙; } return sum; }

    优化二的代码很巧妙,个人最喜欢!

    Processed: 0.010, SQL: 8