您的位置:首页 > 编程语言

编程之美2.9斐波那契数列

2016-06-18 22:38 274 查看
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package Test;

import java.util.Scanner;

/**
*
* @author Administrator
*/
public class Fibonacci {

static long arr[];
private static void arrBuild(int n) {
arr = new long[n+1];
arr[0]=0;
arr[1]=1;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
//解法一 根据斐波那契数列的公式递归求值,效率低
long begin_1 = System.currentTimeMillis();
int num1 = fibonacci1(n);
long end_1 =System.currentTimeMillis();
long l1 = end_1-begin_1;
System.out.println("num1="+num1+"耗时:"+l1);
//解法二 不用递归求
long begin_2 = System.currentTimeMillis();
long num2 = fibonacci2(n);
long end_2 =System.currentTimeMillis();
long l2 = end_2-begin_2;
System.out.println("num2="+num2+"耗时:"+l2);
//解法三  空间换时间,把已经算出来的值存在数组中
arrBuild(n);
long begin_3 = System.currentTimeMillis();
long num3 = fibonacci3(n);
long end_3 =System.currentTimeMillis();
long l3 = end_3-begin_3;
System.out.println("num3="+num3+"耗时:"+l3);
}

private static int fibonacci1(int n) {
if(n ==0)
return 0;
if(n==1)
return 1;
else
return fibonacci1(n-1)+fibonacci1(n-2);
}
private static long fibonacci2(int n) {
if(n ==0)
return 0;
if(n ==1)
return 1;
long a =1;
long b=0;
while(n>=2){
long tmp=a;
a=a+b;
b=tmp;
n--;
}
return a;
}
private static long fibonacci3(int n) {

if(arr
!=0||n==0)
return arr
;
else
arr
=fibonacci3(n-1)+fibonacci3(n-2);
return arr
;
}
}
还没看懂分治法。。。。
也没懂2.8懂了补上。。。好伤心
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: