剑指offer 07斐波那契数列

现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

java版本:

public class Solution {

    public static void main(String[] args) {
        long startTime=System.currentTimeMillis();
        System.out.println("第39项是:"+Fibonacci(39));
        long endTime = System.currentTimeMillis();
        System.out.println("程序运行的时间 :"+(endTime-startTime)+"ms");
        // TODO Auto-generated method stub

    }
    /*采用循环,存取中间项。速度快*/
    /*public static int Fibonacci(int n) {
        int a=1,b=1,c=0;
        if(n<0){
            return 0;
        }else if(n==1||n==2){
            return 1;
        }else{
            for(int i=3;i<=n;i++){
                c=a+b;
                b=a;
                a=c;
            }
            return c;
        }
    }*/
    /*递归,简单,但是速度慢,数字越大,运行时间越长*/
    public static int Fibonacci(int n){
                 if(n==0)
                     return 0;
                 if(n==1)
                    return 1;
                 return Fibonacci(n-1)+Fibonacci(n-2);
    }

}

js版本:

function Fibonacci(n)
{
        if(n==0){
            return 0;
        }
       if(n==1||n==2){
            return 1;
        }
        var a=1,b=1,c=0;
        for(var i=3;i<=n;i++){
             c=a+b;
             b=a;
             a=c;
        }
    return c;// write code here
}

总结:核心思想就是c=a+b;b=a;a=c;这三项。每一次先确定c的值,然后把上一次a的值赋值给b,再把本次的c的值赋值给a,每一次for循环向后走一次。

原文地址:https://www.cnblogs.com/yyfyl/p/9397796.html

时间: 2024-11-07 15:17:09

剑指offer 07斐波那契数列的相关文章

【剑指offer】斐波那契数列

题目1描述: 写一个函数,输入n,求斐波那契数列的第n项.斐波那契数列的定义如下: f(n) = 0 (n = 0);  f(n) = 1 (n = 1);  f(n) = f(n-1)+f(n-2) (n > 1); 分析描述: 在大多数的C语言教科书中,一般会用递归求斐波那契数列.代码如下: long long Fibonacci(unsigned int n) { if(n <= 0) return 0; if(n <= 1) return 1; return Fibonacci(

剑指OFFER之斐波那契数列

题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.斐波那契数列的定义如下: 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入包括一个整数n(1<=n<=70). 输出: 对应每个测试案例, 输出第n项斐波那契数列的值. 样例输入: 3 样例输出: 2 注意:这道题目用递归的话会做大量的重复计算,效率很低.Code: #include <iostream> using namespace std; long long Fibonacc

【剑指offer】斐波那契数列(递归和非递归实现)

递归实现是最常想到的方法,代码如下: //递归方式 long Fibonacci(unsigned n) { if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); } } 显然递归并不是最好的方法,当n较大时效率将非常低下. 较好的思路是: 从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)--依此类推就可以算出第n

《剑指offer》------斐波拉契数列

题目一:求斐波拉契数列的第n项. 写出一个函数,输入n,求斐波拉契(Fibonacci)数列的第n项.斐波拉契数列定义如下: C++实现: //斐波拉契数列 #include <iostream> using namespace std; //递归实现 long long Fibonacci1(unsigned int n){ if(n<=1){ return n; } return Fibonacci1(n-1)+Fibonacci1(n-2); } //非递归实现 long long

《剑指offer》---斐波那契数列

本文算法使用python3实现 1.题目描述: ??大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 ??时间限制:1s:空间限制:32768K 2.思路描述: ??实现斐波那契额数列主要有两种方法: ??(1)递归法:自顶向下进行,当递归较深时,时间复杂度是很高的. ??(2)迭代法:自底向上进行,从第0项开始计算,并将结果保存起来,最后返回第n项即可.该方法时间复杂度较低,但需要额外空间,相对于递归来说,是一种空间换时间的方法. ??接下来我们将分别对

剑指offer——08斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 有多种方法,简单的循环.递归.动态规划: 1 class Solution01 { 2 public: 3 int Fibonacci(int n) { 4 int a = 0, b = 1, c; 5 for (int i = 2; i <= n; ++i) 6 { 7 c = a + b; 8 a = b; 9 b = c; 10 } 11 return n ==

【剑指offer】斐波那契数列非递归求解第N项

public class Solution {    public int Fibonacci(int n) {       //错误输入处理       if(n<0) return -1;       int pre = 1;       int result = 0;       for(int i=0; i<n; i++){           //计算第i项           result += pre;           //将pre往后更新一项           pre =

【剑指Offer】07 - 斐波那契数列

斐波那契数列 时间限制:1秒 空间限制:32768K 本题知识点:递归 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 public class Solution { public int Fibonacci(int n) { } } 解法一: /** * 暴力递归法(性能超级差,谁试谁知道) */ public class Solution { public int Fibonacci(int n) { if(n

07 斐波那契数列 08 跳台阶 两个题的解答相似

官方正规的数学界的斐波那契数列的定义: 波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用. 是以1