题目
原文:
Write a method to generate the nth Fibonacci number.
译文:
写一个方法产生第n个斐波那契数。
解答
斐波那契数列(又称黄金分割数列)指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
特别指出:0是第0项,不是第1项。
这个数列从第二项开始,每一项都等于前两项之和。所以斐波纳契数列的递归形式为:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),是一个线性递归数列,其通项公式为:
递归版本:
public static long fib0(long n){ if(n<0) return -1; if(n==0) return 0; if(n==1) return 1; else return fib0(n-1)+fib0(n-2); }公式版:
public static double fib1(int n){ double gh5=java.lang.StrictMath.sqrt((double)5); return (java.lang.StrictMath.pow((1+gh5),n)-java.lang.StrictMath.pow((1-gh5),n))/(java.lang.StrictMath.pow((double)2,n)*gh5); }
public static long fib2(long n){ if(n<0) return -1; if(n==0) return 0; int a=1; int b=1; for(int i=3;i<=n;i++){ int c=a+b; a=b; b=c; } return b; }
//import java.lang.StrictMath; class Q8_1{ //递归方法 public static long fib0(long n){ if(n<0) return -1; if(n==0) return 0; if(n==1) return 1; else return fib0(n-1)+fib0(n-2); } //公式法 public static double fib1(int n){ double gh5=java.lang.StrictMath.sqrt((double)5); return (java.lang.StrictMath.pow((1+gh5),n)-java.lang.StrictMath.pow((1-gh5),n))/(java.lang.StrictMath.pow((double)2,n)*gh5); } //迭代法 public static long fib2(long n){ if(n<0) return -1; if(n==0) return 0; int a=1; int b=1; for(int i=3;i<=n;i++){ int c=a+b; a=b; b=c; } return b; } public static void main(String[] args){ System.out.println(fib0(7)+""); System.out.println(fib1(7)+""); System.out.println(fib2(7)+""); } }