浅谈:算法中的斐波那契数(五)

方法四:自底向上进行迭代

算法

  • 若 N <= 1,则返回 N。
  • 若 N == 2,则返回 fib(2-1) + fib(2-2) = 1。
  • 使用迭代的方法,我们至少需要三个变量存储 fib(N), fib(N-1) 和 fib(N-2)。
  • 预置初始值:
  1. current = 0。
  2. prev1 = 1,代表 fib(N-1)。
  3. prev2 = 1,代表 fib(N-2)
  • 我们从 3 计算到 N;0,1,2对应的斐波那契数是预先计算。
  • 设置 current = fib(N-1) + fib(N-2),因为 current 代表的是当前计算的斐波那契数。
  • 设置 prev2 = fib(N-1)。
  • 设置 prev1 = current。
  • 当我们到达 N+1,将退出循环并返回 current。

Java 实现

复制代码
class Solution {
    public int fib(int N) {
        if (N <= 1) {
            return N;
        }
        if (N == 2) {
            return 1;
        }

        int current = 0;
        int prev1 = 1;
        int prev2 = 1;

        for (int i = 3; i <= N; i++) {
            current = prev1 + prev2;
            prev2 = prev1;
            prev1 = current;
        }
        return current;
    }
}

Python 实现

复制代码
class Solution:
    def fib(self, N: int) -> int:
        if (N <= 1):
            return N
        if (N == 2):
            return 1

        current = 0
        prev1 = 1
        prev2 = 1

        # Since range is exclusive and we want to include N, we need to put N+1.
        for i in range(3, N+1):
            current = prev1 + prev2
            prev2 = prev1
            prev1 = current
        return current
相关推荐
white-persist2 小时前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
FL16238631292 小时前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
baizhigangqw3 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶
算法·启发式算法·web app
C雨后彩虹3 小时前
最多等和不相交连续子序列
java·数据结构·算法·华为·面试
一江寒逸3 小时前
零基础从入门到精通 AI Agent 开发(全栈保姆级教程)附加篇:AI Agent 面试八股文全集
人工智能·面试·职场和发展
久菜盒子工作室4 小时前
面试经验|产品经理|自我介绍
面试·职场和发展·产品经理
cpp_25014 小时前
P2347 [NOIP 1996 提高组] 砝码称重
数据结构·c++·算法·题解·洛谷·noip·背包dp
Hugh-Yu-1301234 小时前
二元一次方程组求解器c++代码
开发语言·c++·算法
编程大师哥4 小时前
C++类和对象
开发语言·c++·算法
加农炮手Jinx5 小时前
LeetCode 146. LRU Cache 题解
算法·leetcode·力扣