方法一:遞歸
/**
* 斐波納契數列(Fibonacci Sequence):
* F1=1 (n=1)
* F2=1 (n=2)
* F(n)=F(n-1)+F(n-2) (n>=3)
* @author guozw
*
*/
public class Fibonacci00 {
public static long fib(int n) {
if (n <= 1)
return n;
else
return fib(n-1) + fib(n-2);
}
public static void main(String[] args) {
int N = Integer.parseInt("20");
for (int i = 1; i <= N; i++)
System.out.println("第" +i + "個數: " + fib(i));
}
}
方法二:非遞歸
/**
* 斐波納契數列(Fibonacci Sequence):
* F1=1 (n=1)
* F2=1 (n=2)
* F(n)=F(n-1)+F(n-2) (n>=3)
* @author guozw
*
*/
public class Fibonacci {
/*輸出斐波那契數*/
public static void printFibonacciNumber(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
for(int i = 1;i <= n;i++){
System.out.print(f1+" "+f2+" ");//先輸出前兩個數
if(i % 5 == 0)
System.out.print("\n"); //10個數自動換行<爲了顯示,無實際意義>
f1 = f1+f2; //計算下兩個數
f2 = f1+f2;
}
/* 後數除前數爲黃金分割點 */
System.out.print("\n"+"-------------------------------------"+"\n");
System.out.println((double)f2/f1);//越到後邊,後數除前數越接近黃金分割點
}
/*輸出斐波那契數組*/
public static void printFibonacciArray(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
long f[] = new long[n];
f[0]=f1;
f[1]=f2;
for(int i =2;i <n;i++){
f[i]=f[i-2]+f[i-1]; //數組的第三個數開始爲前兩個數的和
}
System.out.println("-------------------------------------"+"\n");
System.out.println(java.util.Arrays.toString(f)); //把數組轉化成String輸出
}
/**
* @param args
*/
public static void main(String[] args) {
// Fibonacci.printFibonacciNumber(0, 1, 10);//print the 20 advanced fibonacci number
Fibonacci.printFibonacciArray(1, 1, 15);
}
}