【算法】使用Java实现斐波那契数列的三种方法,太酷啦

InterviewCoder

# 【算法】使用 Java 实现斐波那契数列的三种方法,太酷啦

# Java 实现斐波那契数列的三种方法

什么是斐波那契数列

  • 这里借用一下度娘的一段话:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多・斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为 “兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
    其规律很明显,从第 3 个数开始,每个数都等于它前两个数的和。
    那么通过 java 可以如何实现斐波那契数列呢?这里介绍三种方法。
  • 通过代码实现以下效果:当你输入 n 时,会获取斐波那契数列的第 n 个数的值。

# 1.for 循环实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}

int[] fib = new int[n+1];
fib[0] = 0;
fib[1] = 1;

for (int i = 2; i <= n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}

return fib[n];
}

# 2. 平方根实现

1
2
3
4
public static int fibonacci(int n) {
double goldenRatio = (1 + Math.sqrt(5)) / 2;
return (int) Math.round(Math.pow(goldenRatio, n) / Math.sqrt(5));
}

# 3. 矩阵快速幂实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}

int[][] base = {{1, 1}, {1, 0}};
int[][] result = pow(base, n - 1);

return result[0][0];
}

private static int[][] pow(int[][] base, int power) {
int[][] result = new int[base.length][base.length];
for (int i = 0; i < base.length; i++) {
result[i][i] = 1;
}

while (power > 0) {
if (power % 2 == 1) {
result = multiply(result, base);
}
base = multiply(base, base);
power /= 2;
}

return result;
}

private static int[][] multiply(int[][] a, int[][] b) {
int[][] c = new int[a.length][b[0].length];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b[0].length; j++) {
for (int k = 0; k < b.length; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
return c;
}

OK,到这里 java 实现斐波那契数列的三种写法就全部写完了,如果大家还有其他方法,欢迎交流~

# 关于我

Brath 是一个热爱技术的 Java 程序猿,公众号「InterviewCoder」定期分享有趣有料的精品原创文章!

InterviewCoder

非常感谢各位人才能看到这里,原创不易,文章如果有帮助可以关注、点赞、分享或评论,这都是对我的莫大支持!

评论