斐波那契Java实现
斐波那契数列Java实现
public class Fib1 {
//递归
public static int fib1(int n){
if (n < 2){return n;} //fib1(0)、fib1(1)
return fib1(n-1) + fib1(n-2);//fib1(2)=fib1(0)+fib1(1)=1.....
}
}
import java.util.HashMap;
import java.util.Map;
public class Fib2 {
//记忆化,采用缓存技术,比如,人可以从常识获得答案,或可以计算获得答案
//这里,采用Map实现,Map.of()为java9的新方法,为初始化map集合
//static Map<Integer,Integer> memo = new HashMap<>(Map.of(0,0,1,1));
static Map<Integer,Integer> memo = new HashMap<>();
public static int fib2(int n){
memo.put(0,0);
memo.put(1,1);
if (!memo.containsKey(n)){
memo.put(n,fib2(n-1) + fib2(n-2));
}
return memo.get(n);
}
}
public class Fib3 {
//正向迭代方法
public static int fib3(int n){
int last =0;//fib3(0)
int next =1;//fib3(1)
for (int i = 0;i<n;i++){
int oldLast = last;
last = next;
next = oldLast +last;
}
return last;//fib3(2)=1 fib3(3)=2...
}
}
import java.util.stream.IntStream;
public class Fib4 {
//使用流来生成
//会一个一个输出每一个菲薄数列元素
private int last = 0;
private int next = 1;
public IntStream stream(){
return IntStream.generate(() ->{
int oldLast = last;
last = next;
next = oldLast + next;
return oldLast;
});
}
public static void main(String[] args) {
Fib4 fib4 = new Fib4();
fib4.stream().limit(40).forEachOrdered(System.out::println);
}
}
比任何人都要努力