剑指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开始计算,做了大量的无用功,导致效率十分低下,用循环实现是更好的选择。
相关文章推荐
- 《剑指offer》【面试题九:斐波那契数列】
- 剑指offer面试题9 斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 《剑指offer》面试题10:斐波那契数列(含矩阵乘法解法)
- 剑指offer:面试题9,斐波那契数列
- 剑指offer面试题 斐波那契数列
- 剑指Offer面试题10:斐波那契数列
- 剑指Offer学习之面试题9 : 斐波那契数列
- (剑指Offer)面试题9:斐波那契数列
- 《剑指offer》(面试题9):斐波那契数列
- 《剑指Offer》学习笔记--面试题9:斐波那契数列
- 剑指offer——面试题9:斐波那契数列
- 《剑指Offer》面试题九之斐波那契数列
- 剑指offer面试题9——矩形框覆盖(递归改循环,斐波那契数列)
- 剑指Offer面试题9(java版):斐波那契数列
- 剑指offer_面试题9_斐波那契数列
- 剑指offer-chapter2-面试题9-斐波那契数列(java)
- 剑指Offer(第二版)面试题10:斐波那契数列