斐波那契数列
简介
斐波那契数列(Fibonacci sequence),又称黄金分割数列、数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
黄金分割的关系
而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近0.618(或者说后一项与前一项的比值小数部分越来越逼近 0.618)。
实现代码,直接通过递推表达式
public static int fun(int n) {
if(n < 1) {
return 0;
}else if(n == 1 || n == 2) {
return 1;
}
return fun(n-1) + fun(n-2);
}
通过这个例子,进入主题,来看一道小米的题目。
面试填空题:填入实现下列功能:计算大于n的斐波那契数列
package test_229;
public class Solution {
//计算大于n的最小的斐波那契数列
public static int array(int n){
int[] a = new int[2];
a[0] = a[1] = 1;
int i =1 ;
while(true){
i = (i + 1)%2;
System.out.println(i);
a[i] = __________________;
if(a[i] > n){
return a[i];
}
}
}
public static void main(String[] args) {
int a=array(6);//这里n=6
System.out.println(a);
}
}
分析这道题目,基本思路,通过画图板演示发现:初始值是下面图片
i |
a[i] |
1 |
1 |
0 |
1 |
进入while循环以后,i会不停地在0,1之间切换,结合斐波那契数列的一般思路,是通过a[i]=a[i-1]+a[i-2]的递推关系式得来,可以思考需要填入的话的功能有两条:
Ⅰ、必要条件:在完成i的0,1切换基础上
Ⅱ、实现a[i]=a[i-1]+a[i-2]
跳出条件:直到通过if(a[i] > n){
return a[i];
}//跳出循环为止
就是通过mod语句来实现跳转
package test_229;
public class Solution {
//计算大于n的最小的斐波那契数列
public static int array(int n){
int[] a = new int[2];
a[0] = a[1] = 1;
int i =1 ;
while(true){
i = (i + 1)%2;
System.out.println(i);
a[i] = a[i%2]+a[(i+1)%2];
if(a[i] > n){
return a[i];
}
}
}
public static void main(String[] args) {
int a=array(1);
System.out.println(a);
}
}