剑指offer-JZ7 斐波那契数列 Fibonacci

难度:入门

题目描述:

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

思路:

1.最容易想到的是递归,但是分析发现递归的时间复杂度非常高,2^n

2.找规律,用循环,创建中间变量来保存前一轮的结果,在下一轮之中直接取用

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        '''if n == 0:
            return 0
        if n == 1:
            return 1
        if n >1:
            num = self.Fibonacci( n-1)+self.Fibonacci( n-2)
            return num
        return None #判断时不是负数,因为体重要求的是整数,没有说一定是整数
          '''  # 如果按照递归来写的话,时间复杂度的增长为(2**n) 因为每个数都会被分为两个,然后不断分解

        # 递归  首先  要理解斐波那契数列    
        # 0 1 1 2 3 5 8 13
        # n=0  num =0  
        # n=1 num = 1
        # n=2 num =1
        # ''''''
        # 当n=k(k>1) 的时候,f(k)=f(k-1)+f(k-2) 
        # 当n=1 ,f(1) =1 当n=0,f(0)=0
        
        
        # 保留中途计算过的结果,用于之后的计算
        # 通过循环来做
        if n == 0:
            return 0
        if n == 1:
            return 1
        a = 1
        b = 0
        ret = 0
        for i in range(0,n-1):
            ret = a + b
            b = a
            a = ret 
        return ret
           
            
        
#         if n > 1:
            #当n=2   h = 0+1  初始化 a=0 b =1

 

posted @ 2021-07-14 21:34  LLLLgR  阅读(26)  评论(0编辑  收藏  举报