动态规划实现斐波那契数列,时间复杂度和空间复杂度解析

动态规划实现斐波那契数列

代码回顾

#include <iostream>
using namespace std;// 动态规划实现,时间复杂度 O(n)
unsigned long long fibonacciDP(int n) {if (n <= 1) return n;unsigned long long prev2 = 0;unsigned long long prev1 = 1;unsigned long long curr;for (int i = 2; i <= n; ++i) {curr = prev1 + prev2;prev2 = prev1;prev1 = curr;}return curr;
}int main() {int n;cout << "Enter a number: ";cin >> n;cout << "Fibonacci(" << n << ") = " << fibonacciDP(n) << endl;return 0;
}

详细介绍

  1. 函数定义

    unsigned long long fibonacciDP(int n) {
    

    定义了一个名为 fibonacciDP 的函数,它接收一个整数 n,返回类型为 unsigned long long,用于表示第 n 个斐波那契数。

  2. 处理基本情况

    if (n <= 1) return n;
    

    如果 n 小于或等于1,直接返回 n,因为斐波那契数列的第0个和第1个数分别为0和1。

  3. 初始化变量

    unsigned long long prev2 = 0;
    unsigned long long prev1 = 1;
    unsigned long long curr;
    

    初始化 prev2prev1 分别为0和1,这两个变量用于存储前两个斐波那契数。curr 用于存储当前计算的斐波那契数。

  4. 计算斐波那契数

    for (int i = 2; i <= n; ++i) {curr = prev1 + prev2;prev2 = prev1;prev1 = curr;
    }
    

    使用一个循环从2开始迭代到 n,每次循环中计算当前的斐波那契数 curr,并更新 prev2prev1

  5. 返回结果

    return curr;
    

    返回第 n 个斐波那契数。

时间复杂度分析

  • 每次计算 curr 都是由前两个已知值 prev1prev2 相加得到的,且这些值在每次迭代时都会更新。
  • 该算法的核心循环从 2 运行到 n,共进行 n-1 次操作。
  • 因此,时间复杂度是 (O(n))。

空间复杂度分析

  • 在这个实现中,我们只使用了常数个变量 prev2prev1curr 来存储当前和之前的斐波那契数。
  • 无论 n 多大,所需的额外空间(不包括输入和输出)都是固定的。
  • 因此,空间复杂度是 (O(1))。

总结

  • 时间复杂度: (O(n)),因为我们需要从2迭代到 n 来计算斐波那契数。
  • 空间复杂度: (O(1)),因为我们只使用了固定数量的变量来存储中间结果。

这种动态规划的方法通过减少不必要的重复计算,大大提高了计算效率,且只需常数空间,因此在计算斐波那契数列时非常高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试宝藏】Redis 常见面试题解析其二

Redis 高级面试题解析 20. 说说 Redis 哈希槽的机制&#xff1f; Redis 集群采用哈希槽&#xff08;Hash Slot&#xff09;机制来分布和管理数据。整个哈希空间被划分为 16384 个槽&#xff0c;每个键通过 CRC16 校验后取模映射到一个哈希槽。每个节点负责一部分哈希槽&#…

【二进制部署k8s-1.29.4】十一、metallb的安装部署

文章目录 简介 一.安装metallb二.配置metallb三.验证metallb 简介 本章节主要讲解安装metallb-v0.7.1的安装&#xff0c;metallb算是平民版的负载均衡&#xff0c;用于测试、访问量较小的情况还是比较不错的&#xff0c;但是对于请求量比较的时候&#xff0c;由于流量都集中在一…

猫熊超市管理系统

import java.util.Scanner;//增加商品类 //此类用来录入一个商品的所有属性&#xff0c;并作为结果对其返回 public class Add {public Goods add1() {Scanner scanner new Scanner(System.in);System.out.println("请输入商品名称");String name scanner.next();S…

表示学习(Representation learning)以及相关(半监督)论文阅读

引言: 这篇博客主要介绍的是表示学习(representation learning),在此基础上,研究了Circle loss这篇CVPR文章。感觉所谓的半监督,目前,在图像分类领域作用寥寥,图数据已经与图像这类数据不是一个类别了。 表示学习(Representation learning)以及相关(半监督)论文阅读…

dns域名解析服务和bond网卡

目录 dns域名解析服务 一、DNS 1、定义 2、以www.baidu.com为例 3、域名体系结构 4、DNS解析使用的协议和端口 5、dns域名解析的过程 6、dns解析的优先级 二、如何实现域名解析 1、域名解析 2、bind配置文件位置 &#xff08;一&#xff09;正向解析 &#xff08;…

fedora40上安装dotnet-sdk-6.0

电脑已经安装过vs code&#xff0c;但是在终端上执行&#xff1a;dotnet --version还是报错。 现在要重新安装dotnet-sdk-6.0 1、确保清理干净之前的安装 首先&#xff0c;移除可能的残留文件&#xff1a; sudo dnf remove dotnet-sdk-6.0 sudo rm -rf /usr/share/dotnet/ …

Python面试宝典:Python中与Pandas数据分析相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第十九章:数据处理和分析:第二节:Pandas数据分析】 第十九章:数据处理和分析第二节:Pandas数据分析1. Pandas的核心数据结构2. 创建Series和DataFrame3. 数据访问和选择4. 数据清洗5…

利他性「销售」回复话术|学会事半功倍!

【菜鸟】&#xff1a;我给你的真的已经是最低价了 【销冠】&#xff1a;现在市场竞争这么激烈&#xff0c;能给你少100我都不会给你少报1块的&#xff0c;我的目的是留下你呀&#xff0c;又怎么会傻到报高价格把你拒之门外呢 【菜鸟】&#xff1a;适合你的才是最好的产品&#…

层出不穷的大模型产品,你怎么选?

随着近日腾讯元宝APP的正式上线&#xff0c;国内大模型产品又添一员。关于接连出现的“全能“大模型AIGC产品&#xff0c;你都用过哪些呢&#xff1f;不妨来分享一下你的使用体验吧&#xff01;在这些大模型产品中&#xff0c;你更倾向于选择哪款&#xff1f; 目前&#xff0c;…

每天CTF小练--ctfshow新手村

easy_base 密文&#xff1a;0XezFWZfNXafRjNlNXYit3dvh2cmR3Y 等号在前面&#xff0c;直接倒序后解码 ctfshow{base64_is_easy} 代码解&#xff1a; s 0XezFWZfNXafRjNlNXYit3dvh2cmR3Y print(s[::-1]) #翻转字符串 print(s[::-1]) #翻转字符串 print(s[::-1]) #翻转…

线性回归模型:统计学中的预测利器

线性回归模型&#xff1a;统计学中的预测利器 线性回归模型是统计学中一种重要的预测模型&#xff0c;广泛应用于各个领域&#xff0c;如经济学、社会科学、生物学和工程学等。它基于最小二乘法原理&#xff0c;通过拟合线性关系来解释变量之间的关系&#xff0c;并预测因变量…

HarmonyOS(二十五)——Harmonyos通用事件之点击事件

组件被点击时触发的事件就是点击事件。 1.事件 名称支持冒泡功能描述onClick(event: (event?: ClickEvent) > void)否点击动作触发该回调&#xff0c;event返回值见ClickEvent对象说明。从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 2.ClickEvent对象…

实现带有执行次数的二分搜索程序

开篇 在之前的文章其二&#xff1a;使用递归法实现二分搜索 中&#xff0c;我们实现了递归的二分搜索程序。今天&#xff0c;我们更进一步&#xff0c;来探讨二分搜索的执行次数。 问题概要 给你的二分搜索程序添加虚拟的“计时变量”来计算程序执行的比较次数&#xff0c;并使…

C++ STL初阶(2):string 的模拟实现

此文的背景是自己实现库中的string&#xff0c;由于string的模版实现较为困难&#xff0c;我们只实现最简单char版本。 1.命名空间分割 为了避免与库中的string冲突&#xff0c;我们使用一个自己的命名空间中来分离并实现所有内容&#xff0c;并且将所有的声明和定义相分离&…

Etcd Raft架构设计和源码剖析1:宏观架构

Etcd Raft架构设计和源码剖析1&#xff1a;宏观架构 | Go语言充电站 序言 Etcd提供了一个样例contrib/raftexample&#xff0c;用来展示如何使用etcd raft。这篇文章通过raftexample介绍如何使用etcd raft。 raft服务 raftexample是一个分布式KV数据库&#xff0c;客户端可…

vivado BEL_PIN、CELL

BEL_PIN是BEL对象上的接点或连接点。 BEL_PIN是一个设备对象&#xff0c;与网表对象&#xff08;如逻辑上的PIN&#xff09;相关 CELL&#xff0c;它是NET的连接点。 相关对象 如图所示&#xff0c;BEL_PIN-对象与BEL和SITE设备资源相关&#xff0c;并且 PIN和NET网表对象。您可…

HTML (总结黑马的)

<br>换行 <hr>水平线 div 独占一行 span 不换行 header 网页头部 nav 网页导航 footer 网页底部 aside 网页侧边栏 section 网页区块 article 网页文章 空格 < 小于号 > 大于号 图片&#xff1a; <img src"./cat.jpg" alt&q…

深度强化学习(Deep Reinforcement Learning, DRL)阶段性学习汇总(二)

深度强化学习里程碑事件 介绍完深度强化学习的背景后&#xff0c;我们来看一下深度强化学习的发展历程&#xff0c;以及里程碑事件 深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;的发展历程是人工智能领域中的一个重要分支&#xff0c;它结合了深度…

Nginx配置详细解释:(3)http模块及server模块,location模块

目录 环境概述&#xff1a; http模块中的全局模块 1. root配置主要是对主web页面的路径访问。 2.server虚拟主机 2.1基于IP&#xff1a; 2.2基于域名&#xff1a; 3.alias别名 4.location匹配 5.access模块&#xff1a; 6.验证模块 7.自定义错误页面 8.日志存放位置…

王道408数据结构CH3_栈、队列

概述 3.栈、队列和数组 3.1 栈 3.1.1 基本操作 3.1.2 顺序栈 #define Maxsize 50typedef struct{ElemType data[Maxsize];int top; }SqStack;3.1.3 链式栈 typedef struct LinkNode{ElemType data;struct LinkNode *next; }*LiStack;3.2 队列 3.2.1 基本操作 3.2.2 顺序存储…