您的位置:首页 > 职场人生

剑指offer-面试题 9 斐波那契数列

2017-04-06 22:41 211 查看

面试题 9 斐波那契数列

  题目:写一个函数,输入 n,求斐波那契数列的第 n 项。

思路

  斐波那契数列是一个很出名的数列,它的特点是从第三项开始,每项都等于前两项之和。对于它的实现有多重方法,有优有劣,直接看代码吧:

代码

package swordOffer;
/**
* 面试题 9:斐波那契数列
* 题目:写一个函数,输入 n,求斐波那契数列的第 n 项。
*
* @author Stephen Huge
*
*/
public class Ex09Fibonacci {
public static void main(String[] args) {
//long类型变量占4个字节,的取值范围-2,147,483,648到2,147,483,647,在此n最大能取到46,
//也就是斐波那契数列的第46项:1,836,311,903,到第47项为2,971,215,073,大于long最大取值
long a = fibonacci(46);
System.out.println(a);
}
public static long fibonacci(int n) {
int a = 0;
int b = 1;
int res = 1;
//      if(n == 1) {
//          System.out.print(res + "\t");
//      }
for(int i = 1; i < n; i++) {
//          if(i == 1) {
//              System.out.print(res + "\t");
//          }
res = b + a;
a = b;
b = res;
//          System.out.print(res + "\t");
//          if((i + 1) % 10 == 0) {
//              System.out.println();
//          }
}
return res;
}
//  递归实现,效率十分低下
public static long f(int n) {
return n > 2 ? f(n - 1) + f(n - 2) : 1;
}
}


输出结果为:

1836311903


  由代码看,这两个方法简洁度上递归实现远超循环实现,但是递归实现对于每项的前两项都要从n==1开始计算,做了大量的无用功,导致效率十分低下,用循环实现是更好的选择。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题