斐波那契数相关问题(不用递归处理)

斐波那契数我们之前学过的递归方法可以解答,但是递归是在是太慢了,可以使用线性递归法,也可以利用python的列表数据存储和获取来处理

  1. 第509题:斐波那契数(LeetCode)
    斐波那契数相关问题(不用递归处理)_第1张图片
class Solution:
    def fib(self, N: int) -> int:
        if N == 0:
            return 0
        elif N == 1:
            return 1
        else:
            a, b = 0, 1
            for _ in range(N):
                a,b = b, a+b
            return a
  1. 第70题:爬楼梯(LeetCode)
    斐波那契数相关问题(不用递归处理)_第2张图片
class Solution:
    def climbStairs(self, n: int) -> int:
        # 尾递归
        if n == 1:
            return 1
        elif n == 2:
            return 2
        else:
            a, b = 1, 1
            for _ in range(n):
                a, b = b, b + a
            return a
class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1:
            return 1
        elif n == 2:
            return 2
        else:
            result = [1, 1]
            for i in range(n-1):
                t = result[i] + result[i+1]
                result.append(t)
            return result[-1]
  1. 第1137题:第 N 个泰波那契数(LeetCode)
    斐波那契数相关问题(不用递归处理)_第3张图片
class Solution:
    def tribonacci(self, n: int) -> int:
        if n==0:
            return 0
        elif n==1 or n==2:
            return 1
        else:
            result = [0,1,1]
            for i in range(0, n-2):
                t = result[i]+result[i+1]+result[i+2]
                result.append(t)
            return result[-1]
class Solution:
    def tribonacci(self, n: int) -> int:
        # self.tribonacci(n-3)+self.tribonacci(n-2)+self.tribonacci(n-1)
        if n==0:
            return 0
        elif n==1 or n==2:
            return 1
        else:
            result = [0,1,1]
            for i in range(3, n+1):
                t = result[i-1]+result[i-2]+result[i-3]
                result.append(t)
            return result[-1]

你可能感兴趣的:(数据结构与算法)