15.3.1. FibLib
15.3.1.FibLib
FibLib 中定义了菲波那契数列的4种算法:
- Java递归版本
- Java迭代版本
- 本地递归版本
- 本地迭代版本
我们从简入手,先提供Java版本的实现,稍后再实现C的本地版本。
例 15.1. FibLib.java
package com.marakana;
public class FibLib {
// Java implementation - recursive
public static long fibJ(long n) { //
if (n <= 0)
return 0;
if (n == 1)
return 1;
return fibJ(n - 1) + fibJ(n - 2);
}
// Java implementation - iterative
public static long fibJI(long n) { //
long previous = -1;
long result = 1;
for (long i = 0; i <= n; i++) {
long sum = result + previous;
previous = result;
result = sum;
}
return result;
}
// Native implementation
static {
System.loadLibrary("fib"); //
}
// Native implementation - recursive
public static native long fibN(int n); //
// Native implementation - iterative
public static native long fibNI(int n); //
}
- Java 递归版本的菲波那契算法
- Java 迭代版本的菲波那契算法,与迭代相比省去了递归的开销。
- 本地版本将在共享库中实现,这里只是告诉 JVM 在需要时加载这个库。
- 定义了对应的函数,但是并不实现他们。注意这里使用了native关键字。它告诉 JVM 该函数的代码在共享库中实现。在调用这个函数前应该加载对应的库。
- 这是迭代的版本。
到这里,FibLib.java已经编写完毕,但上面的native方法还没有实现。接下来就是用C实现本地部分了。