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