java斐波那契数列的顺序输出

2019-08-09 00:00:00 输出 顺序 数列

斐波那契数列,即1、1、2、3、5……,从第三个数开始包括第三个数,都为这个数的前两个数之和,而第一第二个数都为1。

下面是java输出斐波那契数列的代码:

import java.util.HashMap;

public class Test{
    //定义一个hashMap来存储已经计算并且输出过的值
    public static HashMap<Integer, Integer> hashMap = new  HashMap<Integer,Integer>();
    
    //递归方法
    public static int  digui(int num) {
        //判断这个值是否已存在,若存在则直接返回该值
        if(hashMap.containsKey(num)) {
            return hashMap.get(num);
        }
        if(num<=2) {
            System.out.print(1+" ");
            hashMap.put(num, 1);
            return 1;
        }
        int sum = digui(num-1)+digui(num-2);
        System.out.print(sum+" ");
        hashMap.put(num, sum);
        return sum;
    }
    public static void main(String [] args){
       digui(10);
  }
}

输出结果为:

1 1 2 3 5 8 13 21 34 55 

这里最重要的是把已经计算过的值保存起来,再次遇到该值时直接返回,才不会重复计算,从而使得程序运行效率更高,也保证输出结果不会重复。

其实斐波那契数列也可以不用递归来输出,或者说递归的效率反而不高,只不过这个知识点一直是用来练习递归的,所以这里我也就采用递归来输出,但是加了个缓存的HashMap,所以效率比一般的递归还是要快很多。

斐波那契数列别的输出方式输出代码如下:

import java.util.HashMap;

public class Test{

    public static void print(int num) {
        //第一个数
        int first = 1;
        
        //第二个数
        int second = 1;
        
        //接收下一个数
        int sum = 0;
        
        for(int i = 1;i<=num;i++) {
            if(i==1 || i==2) {
                System.out.print(1+" ");
            }else {
                sum = first + second;
                System.out.print(sum+" ");
                first = second;
                second = sum;
            }
        }
    }
    public static void main(String [] args){
        print(10);
  }
    
}

输出结果如下:

1 1 2 3 5 8 13 21 34 55 

第二种方法时间复杂度只有O(num),效率还是非常高的。斐波那契数列还有很多其他的输出方式,这里只是讲几个实现的方法,就不一一列举其他的了。

相关文章