Эффективный расчет чисел Фибоначчи с использованием динамического программирования снизу вверх

«Числа Фибоначчи снизу вверх» относятся к подходу динамического программирования для эффективного расчета чисел Фибоначчи. Вот несколько способов реализовать это вместе с примерами кода:

Метод 1: использование массива

def fibonacci(n):
    if n <= 0:
        return 0
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

Метод 2: использование двух переменных

def fibonacci(n):
    if n <= 0:
        return 0
    prev = 0
    curr = 1
    for _ in range(2, n + 1):
        prev, curr = curr, prev + curr
    return curr

Метод 3. Использование мемоизации

def fibonacci(n, memo={}):
    if n <= 0:
        return 0
    if n in memo:
        return memo[n]
    if n <= 2:
        memo[n] = 1
    else:
        memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
    return memo[n]

Метод 4: использование матричного возведения в степень

import numpy as np
def fibonacci(n):
    if n <= 0:
        return 0
    base = np.array([[1, 1], [1, 0]])
    result = np.array([[1, 0]])
    for _ in range(2, n + 1):
        result = np.matmul(result, base)
    return result[0][1]