由斐波那契数列探究递推与递归

斐波那契数列定义:

斐波那契数列大家都非常熟悉。它的定义是:

请添加图片描述

对于给定的整数 x ,我们希望求出: f ( 1 ) + f ( 2 ) + … + f ( x ) f(1)+f(2)+…+f(x) f(1)+f(2)++f(x) 的值。

有两种方法,分别是递推(迭代)与递归

具体解释如下图

请添加图片描述

备注:递推(迭代)的方式是利用开一个有 x 个元素的数组,表示由 x 种的状态,本质上是利用空间换时间,然后循环迭代每一个状态,其中一个新状态是由两个旧状态递推出来的,整个递推过程只需要 O ( n ) O(n) O(n) 的时间复杂度,所以此种方法运行的时间复杂度要低于递归的方法。

递归的方法更像是一种暴搜(暴力搜索每一种状态),所有搜索到的状态构成一颗递归搜索树,搜索的次数就是所有树上的节点的个数,可以看到递归搜索树的节点树远大于循环迭代次数,其时间复杂度大约为 O ( 2 n − 2 ) O(2^{n - 2}) O(2n2)

代码:

方法一:递推(迭代)

时间复杂度 O ( n ) O(n) O(n)

typedef long long ll;
const int N = 70;ll fib_dp(int x) //递推
{vector<ll> dp(N,0);dp[0] = 0,dp[1] = 1;for (int i = 2;i <= x;i ++ ) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[x];
}

方法二:递归

时间复杂度 O ( 2 n − 2 ) O(2^{n - 2}) O(2n2)

typedef long long ll;
const int N = 70;ll fib_recursion(int x) //递归
{if (!x) return 0;else if (x == 1 || x == 2) return 1;else {return fib_recursion(x - 1) + fib_recursion(x - 2); //后序遍历的写法}
}

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

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

相关文章

C++入门学习(二十九)goto语句

在C中&#xff0c;goto语句是一种控制流语句&#xff0c;用于无条件地转移到程序中指定的行。goto语句的使用通常是不推荐的&#xff0c;因为它可能导致代码结构变得混乱、不易理解和维护。然而&#xff0c;在某些特殊情况下&#xff0c;goto语句可能是一种有效的解决方法。 示…

vue-vuex(七)

阅读文章你可以收获&#xff1a; 1 了解什么是vuex 2 知道如何在vue项目中集成vuex 3 知道vuex由什么组成&#xff0c;并如何使用 vuex概述 1. 是什么&#xff1a;vuex 是一个 vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;vuex 是一个插件&#xff0…

初识最短路径

一.最短路径的介绍 最短路径是图论和网络分析中一个重要的概念&#xff0c;它指的是在一个图或网络中连接两个节点或顶点的路径中&#xff0c;具有最小权重总和的路径。这个权重可以表示为路径上边或弧的长度、耗费、时间等&#xff0c;具体取决于问题的背景和应用场景。 如果你…

PHP服务商微信支付分支付(需确认模式)

//查询支付分是否支付 public function serviceorderServiceorder($out_order_no) {$setting [];$service_id $setting[service_id];$sub_mchid $setting[mchid];$ps "/v3/payscore/partner/serviceorder?service_id${service_id}&sub_mchid${sub_mchid}&out…

【自然语言处理】实验3,文本情感分析

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢…

Java 学习和实践笔记(12)

这个就比较有意思了&#xff01;所有的事情&#xff0c;拆分完之后&#xff0c;都有且只有这三种状态流程&#xff01; //TIP To <b>Run</b> code, press <shortcut actionId"Run"/> or // click the <icon src"AllIcons.Actions.Execute&…

LGAMEFI基于BPL公链开发的第一生态:开启RWA游戏娱乐与DeFi融合的新纪元

在去中心化金融&#xff08;DeFi&#xff09;与游戏娱乐的结合趋势中&#xff0c;BPL公链上的LGAMEFI项目代表了前沿的技术革新和市场领导。这种将web2上成熟页游进行RWA链改&#xff0c;不仅仅是将游戏热门领域融合&#xff0c;更是在寻找一种全新的参与者经验&#xff0c;将玩…

archLinux安装记录

archLinux安装记录 基于wsl的arch 启用wsl 首先&#xff0c;按Win S搜索启用或关闭Windows功能&#xff08;Turn Windows features on or off&#xff09;,打开虚拟机平台和WSL&#xff0c;并重启Windows。 重启后&#xff0c;进入Windows设置&#xff0c;检查更新。 更新完…

『运维备忘录』之 Sed 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

css篇---移动端适配的方案有哪几种

移动端适配 移动端适配是指同一个页面可以在不同的移动端设备上都有合理的布局。主流实现的方案有 响应式布局通过rem或者vw,vh 等实现不同设备有相同的比例而实现适配 首先需要了解viewport 【视口】 视口代表了一个可看见的多边形区域&#xff08;通常来说是矩形&#xff0…

人工智能学习与实训笔记(六):神经网络之智能推荐系统

人工智能学习笔记汇总链接&#xff1a;人工智能学习与实训笔记汇总-CSDN博客 本篇目录 七、智能推荐系统处理 7.1 常用的推荐系统算法 7.2 如何实现推荐 7.3 基于飞桨实现的电影推荐模型 7.3.1 电影数据类型 7.3.2 数据处理 7.3.4 数据读取器 7.3.4 网络构建 7.3.4.1…

LV.23 D2 开发环境搭建及平台介绍 学习笔记

一、Keil MDK-ARM简介及安装 Keil MDK&#xff0c;也称MDK-ARM&#xff0c;Realview MDK &#xff08;Microcontroller Development Kit&#xff09;等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。 MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备…