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

Posted ayew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-斐波那契数列-递归和循环-python相关的知识,希望对你有一定的参考价值。

大家都知道斐波那契数列(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

以上是关于剑指offer-斐波那契数列-递归和循环-python的主要内容,如果未能解决你的问题,请参考以下文章

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

剑指offer

剑指offer-斐波那契数列

剑指Offer07 - 斐波那契数列

剑指offer-矩形覆盖-斐波那契数列(递归,递推)

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