递归+记忆化递归+DP:斐波那契数列
递归:算法复杂度O(2^N)
1 int fib(int n)
2 {
3 if (n == 0)
4 {
5 return 0;
6 }
7 if (n == 1)
8 {
9 return 1;
10 }
11
12 return fib(n - 1) + fib(n - 2);
13 }
由于普通的递归会进行大量的重复计算,因此,我们采用记忆化递归,记录出现过的斐波那契数字,不再重复计算。
记忆化递归:算法复杂度O(N)
1 vector<int> memo; //memo[i]记录第i个斐波那契数列
2
3 int fib(int n)
4 {
5 if (n == 0)
6 {
7 return 0;
8 }
9 if (n == 1)
10 {
11 return 1;
12 }
13 if (memo[n] == -1)
14 {
15 memo[n] = fib(n - 1) + fib(n - 2);
16 }
17
18 return memo[n];
19 }
动态规划:将原问题拆解成若干个子问题,同时保存子问题的答案,使每个子问题只求一次,最终获得原问题答案。
算法复杂度:O(N)
1 int fib(int n)
2 {
3 vector<int> memo(n + 1, -1);
4
5 memo[0] = 0;
6 memo[1] = 1;
7 for (int i = 2; i <= n; i++)
8 {
9 memo[i] = memo[i - 1] + memo[i - 2];
10 }
11 return memo[n];
12 }
递归+记忆化递归+DP:斐波那契数列的更多相关文章
- Xorequ(BZOJ3329+数位DP+斐波那契数列)
题目链接 传送门 思路 由\(a\bigoplus b=c\rightarrow a=c\bigoplus b\)得原式可化为\(x\bigoplus 2x=3x\). 又异或是不进位加法,且\(2x ...
- 【递归】斐波那契数列第n个数
递归.递推计算斐波那契数列第n项的值: #include <stdio.h> long long fact(int n); //[递推]计算波那契数列第n个数 long long fact ...
- 剑指Offer——斐波那契数列
题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 分析: 递归解法肯定相当耗时. 因为当n=4时,程序是这样子递归运算的:Fibonacci( ...
- java斐波那契数列的顺序输出
斐波那契数列,即1.1.2.3.5......,从第三个数开始包括第三个数,都为这个数的前两个数之和,而第一第二个数都为1. 下面是java输出斐波那契数列的代码: import java.util. ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- DP思想在斐波那契数列递归求解中的应用
斐波那契数列:1, 1, 2, 3, 5, 8, 13,...,即 f(n) = f(n-1) + f(n-2). 求第n个数的值. 方法一:迭代 public static int iterativ ...
- [每日一题2020.06.14]leetcode #70 爬楼梯 斐波那契数列 记忆化搜索 递推通项公式
题目链接 题意 : 求斐波那契数列第n项 很简单一道题, 写它是因为想水一篇博客 勾起了我的回忆 首先, 求斐波那契数列, 一定 不 要 用 递归 ! 依稀记得当年校赛, 我在第一题交了20发超时, ...
- 算法 递归 迭代 动态规划 斐波那契数列 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- JS:递归基础及范例——斐波那契数列 、 杨辉三角
定义:程序调用自身的编程技巧称为递归.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就 ...
- Python递归及斐波那契数列
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可 ...
随机推荐
- Linux-用户管理命令(必须是超级管理员-root)
useradd [名字] 创建一个新用户 (home 下创建) useradd -d [路径][名字] 路径中的名字是文件 , 登录用的后面的名字 passwd [用户名] 设置密码, ...
- Vue通过v-modal实现子组件通讯
1.在props设置属性value props: { value: { type: Object, default: {} } } 1.设置data数据,接收value,在mounted或create ...
- 论文解读(Moka‑ADA)《Moka‑ADA: adversarial domain adaptation with model‑oriented knowledge adaptation for cross‑domain sentiment analysis》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Moka‑ADA: adversarial domain adaptation with model‑o ...
- AcWing 第 92 场周赛 C题 4866. 最大数量 题解
原题链接 链表 + 并查集乱搞做法: 思路 首先可以发现,想要让度数尽量大,那我们应该构造成菊花图,即下图所示: 对于每个需求,我们可以知道,如果之前他们没有连在一起,那我们一定得把他们连在一起,该过 ...
- [loki]轻量级日志聚合系统loki快速入门
前言 简述:loki是由grafana开源的日志聚合系统,相较于ELK.EFK更轻量. loki特性: 不对日志进行全文索引.通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成 ...
- 使用Jenkins部署Git仓库微服务项目
Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具.本文使用Jenkins自动构建git仓库中的微服务项目,包括Jenkins的安装,插件的安装:系统环境的配置:docker镜像构建的 ...
- 单节点 RAID6 可靠性模型
介绍 独立磁盘冗余阵列(Redundant Arrays of Independent Disks, RAID)是存储业界为保证数据可用性.可靠性和完整性所采用的重要技术,即使在分布式多副本如此流行和 ...
- 交叉编译 Qt5.12 armv8(aarch64) 带 WebEngine - NVIDIA JETSON TX2
编译平台 Windows10 WSL2 Debian,目标平台 NVIDIA JETSON TX2 (注:Ubuntu <= 16.04 会出现 libclang < 3.8 的问题) 下 ...
- Linux下Python环境安装
Linux通常都附带Python环境,但是Linux附带的大多数Python都是2.7.5版本.如果我们想使用Python3或者Anaconda3,最好安装一个新的Python3环境,但不要尝试删除P ...
- JDK17和JDK8在windows上同时安装方便切换
参考:https://blog.csdn.net/chencaw/article/details/121674479 一.JDK8的安装 1.电脑上已经安装了JDK8,安装主要步骤如下 (1)创建JA ...