剑指offer-面试题 9 斐波那契数列
来源:互联网 发布:游戏网络推广员 编辑:程序博客网 时间:2024/05/22 04:33
面试题 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开始计算,做了大量的无用功,导致效率十分低下,用循环实现是更好的选择。
0 0
- 【剑指offer】面试题9:斐波那契数列
- 剑指offer 面试题9 斐波那契数列
- 剑指Offer:面试题9 斐波那契数列
- 剑指offer-面试题9:斐波那契数列
- 剑指offer 面试题9:斐波那契数列
- 【剑指offer】面试题9:斐波那契数列
- 剑指offer--面试题9:斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 剑指Offer---面试题9:斐波那契数列
- 剑指Offer面试题9斐波那契数列
- 剑指offer-面试题 9 斐波那契数列
- 剑指Offer面试题9[斐波那契数列]
- 剑指offer面试题9 斐波那契数列
- 【剑指offer】面试题9:斐波那契数列
- [剑指offer]面试题9:斐波那契数列
- 剑指offer面试题 斐波那契数列
- 剑指Offer----面试题九:斐波那契数列
- 剑指offer-面试题09-斐波那契数列
- stl algorithm merge
- Funny Car Racing CSU
- Remove Duplicates from Sorted Array (java版)
- 深入理解MySQL的外连接、内连接、交叉连接
- Numpy中的数组花式索引
- 剑指offer-面试题 9 斐波那契数列
- Android用户引导页实现,圆点实现动画效果
- IE6双边距bug*
- parzen窗方法和k近邻方法估计概率密度
- Swift-在AppDelegate弹框(UIAlertController)进行present跳转--学习笔记
- web.xml配置文件元素详解
- SystemServer进程启动流程的理解
- 归并排序
- TensorFlow安装