【剑指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 == 0){
            return 0;
        }
        if(n == 1){
            return 1;
        }

        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}
解法二:
/**
 * 备忘录法 自顶而下,在树的多路归并时有较好的效果
 */
public class Solution {

    int[] array = new int[40];

    public int Fibonacci(int n) {

        array[0] = 0;
        array[1] = 1;
        array[2] = 1;

        if(n == 0){
            return 0;
        }
        if(n == 1 || n == 2){
            return 1;
        }

        int result = memo(n);
        return result;
    }

    public int memo(int n){
        if(array[n-2] == 0){
            array[n-2] = memo(n-2);
        }

        if(array[n-1] == 0){
            array[n-1] = memo(n-1);
        }

        return array[n-2] + array[n-1];
    }
}
解法三:
/**
 * n 的值较小,因此可以直接将数组求出后,查找对应的 n 值
 */
public class Solution {

    public int Fibonacci(int n) {
        int[] array = new int[40];
        array[0] = 0;
        array[1] = 1;
        for(int i=2; i<40; i++){
            array[i] = array[i-1] + array[i-2];
        }
        return array[n];
    }
}
解法四:
/**
 * 动态维护 i 和 j 两个值,根据 n 的值返回靠前的 i
 */
public class Solution {

    public int Fibonacci(int n) {
        int i = 0;
        int j = 1;
        int tmp;
        while((n--)>0){
            tmp = j;
            j += i;
            i = tmp;
        }
        return i;
    }
}

原文地址:https://www.cnblogs.com/jianminglin/p/11361170.html

时间: 2024-08-30 09:34:31

【剑指Offer】07 - 斐波那契数列的相关文章

剑指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.currentTimeMill

【剑指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 =

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