递归算法介绍和【题解】——数楼梯

递归算法介绍和【题解】——数楼梯

  • 1.递推算法介绍
  • 2.数楼梯
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例
      • 输入 #1
      • 输出 #1
    • 提示
  • 1.思路解析
  • 2.AC代码

1.递推算法介绍

    有些目标是宏大的,比如如果你想找到一个好工作,需要先把面试通过。要把面试通过,就需要在大学努力学习。如果想听懂大学的课,就需要先听懂中学的课。想要听懂中学的课,又需要在小学好好听讲……

    在小学好好听讲->听懂中学的课->在大学努力学习->通过面试绩->找到好工作

    像这样,将一个很大的任务分解成规模小一些的子任务,子任务分成更小的子任务,直到遇到初始条件整理归纳解决大任务就是递推和递归思想。

2.数楼梯

通往洛谷的传送门

题目描述

楼梯有 N N N 阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

输入格式

一个数字,楼梯数。

输出格式

输出走的方式总数。

输入输出样例

输入 #1

4

输出 #1

5

提示

  • 对于 60 % 60\% 60% 的数据, N ≤ 50 N \leq 50 N50
  • 对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 5000 1 \le N \leq 5000 1N5000

1.思路解析

    想要模拟每一种到最后一阶的方法然后累加是不行的,需要花费的时间太长了。

    不过可以发现,想要走到第 i i i阶,就需要先走到第 i − 1 i-1 i1阶或 i − 2 i-2 i2阶。那么走到第 i i i阶的方法数就是走到第 i − 1 i-1 i1阶和走到第 i − 2 i-2 i2阶的方法数之和。

    因此,我们定义一个f数组,f[i]表示走到第i阶的方法数。接下来只要迭代计算f[i]=f[i-1]+f[i-2]就行了。递推中,像f[i]=f[i-1]+f[i-2]这样的式子就叫做递推式。(其实可以发现,它和斐波那契数列有着异曲同工之妙。)

    不过要注意,当i=1i=2时,只需要一步就可以跨上去了。所以需要初始化f[1]=f[2]=1;。像这样的条件就叫做递推边界

    最后,由于数字比较大,需要使用高精度数存储。详见这一篇文章
在这里插入图片描述

2.AC代码

#include<bits/stdc++.h>
using namespace std;
struct bigint//定义高精度整形 
{int a[100],len;//调试的时候数组大小定小一点,不然会导致栈空间溢出 bigint(int x=0){memset(a,0,sizeof(a));if(x==0){len=1;return;}for(len=1;x;len++)a[len]=x%10,x/=10;len--;}int &operator[](int i){return a[i];}void print(){for(int i=len;i>=1;i--)cout<<a[i];}void flatten(int L){len=L;for(int i=1;i<=len;i++)a[i+1]+=a[i]/10,a[i]%=10;while(!a[len])len--;}friend bigint operator+(bigint a,bigint b)//只需要实现高精度加法 {bigint c;int _len=max(a.len,b.len);for(int i=1;i<=_len;i++)c[i]+=a[i]+b[i];c.flatten(_len+1);return c;}
};
int main()
{int n;bigint f[5010];//f[i]代表上到第i个台阶的方法数 cin>>n;f[1]=bigint(1);//初始条件,上到第一个台阶只有1种方案 f[2]=bigint(2);//初始条件,上到第二个台阶只有2种方案 for(int i=3;i<=n;i++)//从第三个台阶开始循环 f[i]=f[i-1]+f[i-2];//递推式 f[n].print();return 0;
}

喜欢就订阅此专辑吧!

【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。

欢迎扫码关注蓝胖子编程教育
在这里插入图片描述

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

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

相关文章

力扣(leetcode)每日一题 1014 最佳观光组合

题干 1014. 最佳观光组合 给你一个正整数数组 values&#xff0c;其中 values[i] 表示第 i 个观光景点的评分&#xff0c;并且两个景点 i 和 j 之间的 距离 为 j - i。 一对景点&#xff08;i < j&#xff09;组成的观光组合的得分为 values[i] values[j] i - j &#…

总结C/C++中内存区域划分

目录 1.C/C程序内存分配主要的几个区域&#xff1a; 2.内存分布图 1.C/C程序内存分配主要的几个区域&#xff1a; 1、栈区 2、堆区 3、数据段&#xff08;静态区&#xff09; 4.代码段 2.内存分布图 如图&#xff1a; static修饰静态变量成员——放在静态区 int globalVar 是…

uniapp在线打包的ios后调用摄像头失败的解决方法

uniapp在线打包的ios后调用摄像头失败的解决方法 解决方法&#xff1a; 由于未选中打包模块的配置 当你在测试时发现能够正常的开启摄像头&#xff0c;但是当你对其进行在线打包后&#xff0c;发现当你点击启用摄像头时&#xff0c;没有反应&#xff0c;或者是打开是黑屏状态…

《情书》你的名字,是最美的情书

《情书》你的名字&#xff0c;是最美的情书 岩井俊二&#xff0c;日本电影导演&#xff0c;作家及记录片导演。被誉为日本最有潜质的新近“映像作家”&#xff0c;也有中国影迷称他为“日本王家卫”。影像清新独特、感情细腻丰富。&#xff08;来自豆瓣&#xff09; 穆晓芳 译 …

网页WebRTC电话和软电话哪个好用?

关于WebRTC电话与软件电话哪个更好用&#xff0c;这实际上取决于多个因素&#xff0c;并没有一个绝对的答案。不过&#xff0c;我可以根据WebRTC技术的一些特点&#xff0c;以及与传统软件电话相比的优劣势&#xff0c;为你提供一个清晰的对比。 首先&#xff0c;让我们了解一下…

无监督算法目标识别-工业异常检测模型Padim+PatchCore的C++_libtorch实现

基于anomalib的python代码完美复现 示例&#xff1a; 使用无监督算法识别缺陷&#xff1a;图像复杂不能太高&#xff0c;尽量是简单背景的图片&#xff0c;如果太复杂了还是直接上有监督算法识别泛化能力强 代码实现详见&#xff1a;****Gitee

11.全面学习面向对象技术

面向对象开发 相关概念 对象&#xff1a;由数据及其操作所构成的封装体&#xff0c;是系统中用来描述客观事务的一个实体&#xff0c;是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成。类&#xff1a;现实世界中实体的形式化描述&#xff0c;类…

Chainlit集成LlamaIndex实现知识库高级检索(组合对象检索)

检索原理 对象组合索引的原理 是利用IndexNode索引节点&#xff0c;将两个不同类型的检索器作为节点对象&#xff0c;使用 SummaryIndex &#xff08;它可以用来构建一个包含多个索引节点的索引结构。这种索引通常用于从多个不同的数据源或索引方法中汇总信息&#xff0c;并能…

第18章 中断和异常的处理与抢占式多任务

第18章 中断和异常的处理与抢占式多任务 中断和异常 中断和异常概述 中断&#xff08;Interrupt&#xff09;&#xff1a; 硬件中断是由外围硬件设备发出的中断信号引发的&#xff0c;以请求处理器提供服务。软中断是由int n指令引发的中断处理&#xff0c;n是中断号或者叫…

【Python】数据可视化之分布图

分布图主要用来展示某些现象或数据在地理空间、时间或其他维度上的分布情况。它可以清晰地反映出数据的空间位置、数量、密度等特征&#xff0c;帮助人们更好地理解数据的内在规律和相互关系。 目录 单变量分布 变量关系组图 双变量关系 核密度估计 山脊分布图 单变量分布…

5.数据结构与算法-类C语言的有关操作

元素类型说明 数组定义 C语言的动态内存分配 C动态存储分配 C的参数传递 传值方式 传地址方式 形参变化影响实参 形参变化不影响实参 数组名做参数 引用类型做参数

高通AI应用程序开发3:网络模型(一)

1. 支持的网络模型 Qualcomm神经处理SDK支持下表所列的网络模型。 有关支持的运行时和单个图层类型的限制和约束的详细信息&#xff0c;请参阅 限制 。 GPU运行时中支持的所有层对两种GPU模式都有效&#xff1a;GPU_FLOAT32_16_HYBRID和GPU_FLAAT16。GPU_FLOAT32_16_HYBRID-…

【刷点笔试面试题试试水】找错—使用strlen()函数代替sizeof计算字符串长度

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;void UpperCase(ch…

Qt Linguist手册-翻译员

翻译人员 Qt Linguist 是为 Qt 应用程序添加翻译的工具。一旦安装了 Qt&#xff0c;就可以像开发主机上的其他应用程序一样启动 Qt Linguist。 Qt Linguist 主窗口包含一个菜单栏和以下视图&#xff1a; 上下文 (F6) 用于从上下文列表中选择要翻译的字符串。字符串 (F7) 用于…

信号处理快速傅里叶变换(FFT)的学习

FFT是离散傅立叶变换的快速算法&#xff0c;可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的&#xff0c;但是如果变换到频域之后&#xff0c;就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外&#xff0c;FFT可以将一个信号的频谱提取出来&am…

leetcode每日一题day19(24.9.29)——买票需要的时间

思路&#xff1a;在最开始的情况下每人需要买的票数减一是能保持相对位置不变的&#xff0c; 如果再想减一就有可能 有某些人只买一张票&#xff0c;而离开了队伍&#xff0c; 所有容易想到对于某个人如果比当前的人买的多就按当前的人数量算 因为在一次次减一的情况下&#xf…

从零开始手写STL库:Stack

从零开始手写STL库–Stack的实现 Gihub链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–Stack的实现一、stack是什么&#xff1f;二、stack要包含什么函数总结 一、stack是什么&#xff1f; 栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09…

计算机网络--TCP、UDP抓包分析实验

计算机网络实验 目录 实验目的 实验环境 实验原理 1、UDP协议 2、TCP协议 实验具体步骤 实验目的 1、掌握使用wireshark工具对UDP协议进行抓包分析的方法&#xff0c;掌握UDP协议的报文格式&#xff0c;掌握UDP协议校验和的计算方法&#xff0c;理解UDP协议的优缺点&am…

【数据库文档】数据库设计说明书(Word原件参考)

一、 总述 &#xff08;一&#xff09; 编写目的 二、 外部设计 &#xff08;一&#xff09; 环境说明 &#xff08;二&#xff09; 指导 三、 物理实现 &#xff08;一&#xff09; 物理结构 &#xff08;二&#xff09; 安全设计 四、 表设计结构 &#xff08;一&#xff09;…

SpringAOP学习

面向切面编程&#xff0c;指导开发者如何组织程序结构 增强原始设计的功能 oop:面向对象编程 1.导入aop相关坐标&#xff0c;创建 <!--spring依赖--><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spri…