15.3.1. FibLib

优质
小牛编辑
128浏览
2023-12-01

15.3.1.FibLib

FibLib 中定义了菲波那契数列的4种算法:

  1. Java递归版本
  2. Java迭代版本
  3. 本地递归版本
  4. 本地迭代版本

我们从简入手,先提供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); //

}

  1. Java 递归版本的菲波那契算法
  2. Java 迭代版本的菲波那契算法,与迭代相比省去了递归的开销。
  3. 本地版本将在共享库中实现,这里只是告诉 JVM 在需要时加载这个库。
  4. 定义了对应的函数,但是并不实现他们。注意这里使用了native关键字。它告诉 JVM 该函数的代码在共享库中实现。在调用这个函数前应该加载对应的库。
  5. 这是迭代的版本。

到这里,FibLib.java已经编写完毕,但上面的native方法还没有实现。接下来就是用C实现本地部分了。