斐波那契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);
    }
}
posted @ 2023-05-12 23:19  郭培鑫同学  阅读(43)  评论(0编辑  收藏  举报