剑指offer刷题记录之斐波那契数列

1. 题目描述

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

2. 暴力解题(自下而上)

2.1 分析

斐波那契数列指的是这样一个数列:这个数列从第3项开始,每一项都等于前两项之和:
在这里插入图片描述
本题中:
f ( 0 ) = 0 , f ( 1 ) = 1 f(0)=0, f(1)=1
最简单暴力的方法就是循环从第2项开始算一直算到第n项。

2.2 代码

    def Fibonacci(self, n):
        # write code here
        if n == 0:
            return 0
        elif n == 1:
            return 1
        else:
            f0 = 0
            f1 = 1
            for i in range(2, n+1):
                f2 = f0+f1
                f0 = f1
                f1 = f2
            return f2

2.3 复杂度

时间复杂度: O(n)

3. 递归(自上而下)

3.1 分析

f ( n ) = f ( n 1 ) + f ( n 2 ) f ( n 1 ) = f ( n 2 ) + f ( n 3 ) f ( n 2 ) = f ( n 3 ) + f ( n 4 ) . . . f ( 2 ) = f ( 1 ) + f ( 0 ) f(n) = f(n-1) + f(n-2) \\ f(n-1) = f(n-2) + f(n-3) \\ f(n-2) = f(n-3) + f(n-4) \\ ... \\ f(2) = f(1) + f(0)

3.2 代码

class Solution:
    def Fibonacci(self, n):
        # write code here
        if n == 0:
            return 0
        elif n == 1:
            return 1
        elif n >= 2:
            return self.Fibonacci(n-1) + self.Fibonacci(n-2)

利用上面递推式,自顶向下进行求解,因为存在大量的重叠子问题,时间复杂度为 O ( 2 n ) O(2^n) ,在牛客中超时未能通过

3.3 复杂度

时间复杂度: O ( 2 n ) O(2^n)

4. 其他解法

在这里插入图片描述
在这里插入图片描述

发布了49 篇原创文章 · 获赞 104 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/xijuezhu8128/article/details/104689074