剑指offer-斐波那契数列-递归和循环-python

GhostLWB 2019-12-14

大家都知道斐波那契数列(1、1、2、3、5、8、13、21、34、……),现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

n<=39

斐波那契数列满足递归的条件:既F(n) = F(n-1)+F(n-2)

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        #递归法
        if n ==0:
            return 1
        elif n ==1:
            return 1
        else:
            return self.Fibonacci(n-1) +self.Fibonacci(n-2)

这种方式简单粗暴,但是允许时间太长了。

方法2

循环叠加两个数

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        #递归法
        a = 0
        b = 1
        # 循环叠加,因为每次叠加两个,所以,只需要循环到n的一半就行,但是数据是从0开始,所以需要到n // 2 + 1
        for i in range(1, n // 2 + 1):
            a = a + b
            b = a + b
        # 叠加之后,如果n为奇数,那么返回b,如果n为偶数,那么返回a
        if n % 2 == 1:
            return b
        else:
            return a
        pass

方式3,类似2

class Solution:
    def Fibonacci(self, n):
        # write code here
        a = 0
        b = 1
        if n <= 1:
            return n
        for i in range(n):
            a ,b = b,b+a            
        return a

相关推荐