zoukankan      html  css  js  c++  java
  • java斐波那契数列的顺序输出

    斐波那契数列,即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),效率还是非常高的。斐波那契数列还有很多其他的输出方式,这里只是讲几个实现的方法,就不一一列举其他的了。

  • 相关阅读:
    codeforces 616B Dinner with Emma
    codeforces 616A Comparing Two Long Integers
    codeforces 615C Running Track
    codeforces 612C Replace To Make Regular Bracket Sequence
    codeforces 612B HDD is Outdated Technology
    重写父类中的成员属性
    子类继承父类
    访问修饰符
    方法的参数
    实例化类
  • 原文地址:https://www.cnblogs.com/wujianwu/p/11126751.html
Copyright © 2011-2022 走看看