您的位置:首页 > 其它

Cracking the coding interview--Q8.1

2014-02-23 11:24 381 查看
题目

原文:

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)+"");
}
}

---EOF---
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: