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*),是一个线性递归数列,其通项公式为:
![](https://img-blog.csdn.net/20140223094241000?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmF2eWlmYW5y/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
递归版本:
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---
原文:
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---
相关文章推荐
- Cracking the coding interview--Q8.1
- Cracking The Coding Interview 5.6
- Cracking the coding interview--Q4.5
- Cracking the coding interview--Q4.7
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目3
- Cracking the coding interview--Q20.5
- 《Cracking the Coding Interview》——第13章:C和C++——题目5
- Cracking the coding interview--Q5.3
- Cracking the coding interview
- Cracking The Coding Interview 9.6
- 《Cracking the Coding Interview》——第17章:普通题——题目4
- 《Cracking the Coding Interview》——第18章:难题——题目1
- Cracking the coding interview--Q8.2
- Cracking the Coding Interview 之测试
- Cracking the Coding Interview 5.7
- Cracking the Coding Interview(Stacks and Queues)
- Cracking the coding interview–Q1.3
- Cracking the coding interview--Q1.4
- Cracking the coding interview--Q3.4
- Cracking the coding interview--Q3.6