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

news2024/12/27 17:42:54

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

  • 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.coloradmin.cn/o/2181313.html

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

相关文章

c++11~c++20 结构化绑定

结构化帮绑定可以作用于3中类型 一、原生数组类型 结果&#xff1a; 备注&#xff1a;绑定到原生数组所需条件仅仅是要求别名的数量于数组元素的个数一致&#xff0c;这里的x&#xff0c;y&#xff0c;z分别绑定到a[0],a[1],a[2] 二、绑定到结构体和类对象 结果&#xff1a;…

C99中的变长数组

在C99标准之前&#xff0c;从语言在创建数组的时候&#xff0c;指定数组的大小只能使用常量和表达式&#xff0c;或者数据初始化的时候&#xff0c;可以省略数组大小。 1.int arr[5]{1,2,3,4,4}; 2.int arr[24]{1,2,3,4,5,6}; 3.int arr[]{1,2,3,3,4,5,6}; 这样的语法限制不够灵…

新疆阿克苏地区新和县召开2024年重大项目高质量发展推进会

五一水库及生态修复产业融合发展等14个项目动工兴建 9月29日&#xff0c;新疆阿克苏地区新和县举行2024年重大项目高质量发展推进会上&#xff0c;五一水库生态修复暨产业融合发展重点项目等14个项目正式动工兴建。 据了解&#xff0c;此次开工的14个项目&#xff0c;总投资17…

LPDDR4芯片学习(二)——Functional Description

一、LPDDR4寻址表 以每个die容量为4GB为例&#xff1a; Memory density(per channel) 2Gb&#xff1a;每个通道大小为2Gb&#xff0c;一个die有两个通道Configuration 16Mb 16DQ 8 banks 2 channels &#xff1a;16Mb的寻址空间16位每个channels8个bank*每个die两channels。1…

电影《749局》酷燃首映 苗苗神秘感大片释出氛围感拉满

2024 年 9 月 30 日&#xff0c;电影《749 局》在北京举办首映礼&#xff0c;导演陆川携主创王俊凯、苗苗、郑恺、任敏、李晨、杨皓宇出席&#xff0c;演员苗苗在片中饰演 749 局成员夏婳&#xff0c;这个角色天赋异禀&#xff0c;拥有特殊异能&#xff0c;为影片增添一抹神秘色…

从异步传染浅谈代数效应

如果你经常使用并且关注React&#xff0c;你一定会在不少地方见过"代数效应"&#xff08;algebra effect) 这个抽象概念。可能是翻译和过度学术的缘故&#xff0c;我看了很多文章才大致理解&#xff0c;在这里简单记录一下。 try/catch & try/handle 你一定使用…

通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测

CSMA/CD&#xff1a;载波监听多路访问/冲突检测 CSMA/CD&#xff08;Carrier Sense Multiple Access/Collision Detect&#xff09;&#xff0c;即载波监听多路访问/冲突检测&#xff0c;是一种用于数据通信的介质访问控制协议&#xff0c;广泛应用于局域网&#xff08;特别是以…

SQL增删查改操作

目录 数据库概述 SQL基础操作 SQL通用语法 数据类型 SQL语句的分类 DDL(数据库定义,表定义,字段定义) 数据库操作 表操作 DDL小结 DML(数据的增删改,数据操作语言) DQL(查询) DQL小节 数据库概述 数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软…

养老院管理系统(含源码+sql+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 养老院管理系统拥有两种角色&#xff1a;管理员和护工 管理员&#xff1a;用户管理、老人信息管理、事故记录管理、入住费用管理、护工薪资管理、护工请假管理、床位管理、请假管理等 护…

消息中间件:RabbitMQ

消息中间件&#xff1a;RabbitMQ 前言安装Window安装Linux安装 管理页面什么是RabbitMQ&#xff1f;入门基本概念简单队列工作队列&#xff08;Work Queues&#xff09;发布/订阅&#xff08;Publish/Subscribe&#xff09;临时队列 路由&#xff08;Routing&#xff09;主题&a…

NanoDet安装教程

目录 1.安装NanoDet 1.1官网下载NanoDet 1.2 创建虚拟conda环境 1.3安装Pytorch库 2.侦测 3.训练 3.1yml文件修改 3.训练 3.1yml文件修改 轻量级模型 NanoDet-m 目标检测框架&#xff1a; YOLO 、 SSD 、 Fast R-CNN 等模型 &#xff1b;但模型太大&#xff0c;不适合移植到移…

HTTP状态码全解

文章目录 常见状态码1XX Informational&#xff08;请求正在处理&#xff09;2XX Success&#xff08;请求成功&#xff09;3XX Redirection&#xff08;重定向&#xff09;4XX Client Error&#xff08;客户端错误&#xff09;5XX Server Error&#xff08;服务器错误&#xf…

ros2安装完成后重要的一步

安装完成ros2之后&#xff0c;每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题&#xff0c;我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

浸没式密封连接器

在当今科技快速发展的背景下&#xff0c;电子设备的整合度与性能需求持续提高&#xff0c;而连接技术作为电子设备间交互的关键&#xff0c;其重要性显而易见。在各式各样的连接技术当中&#xff0c;浸没式密封连接器凭借其独到设计和高超性能&#xff0c;在特定使用环境中显示…

学习经验分享【38】YOLOv11解读——最新YOLO版本

YOLO算法更新速度很快&#xff0c;已经出到V11版本&#xff0c;后续大家有想发论文或者搞项目可更新自己的baseline了。后续将改进YOLOv11算法&#xff0c;有需要的朋友可关注&#xff0c;我会持续进行更新。 YOLO11是Ultralytics YOLO系列实时目标检测器的最新迭代版本&#x…

《Linux从小白到高手》理论篇(七):Linux的时间管理运行级别启动过程原理详解

List item 本篇将介绍Linux的时间管理&运行级别相关知识&#xff0c;并将深入介绍Linux的启动过程及原理。 Linux的时间管理 Linux 时钟分为系统时钟&#xff08;System Clock&#xff09;和硬件&#xff08;Real Time Clock&#xff0c;简称 RTC&#xff09;时钟。系统时…

STM32CubeMX创建STM32H743工程

1、下载安装STM32CubeMX STM32CubeMX是STM32Cube工具家族中的一员&#xff0c;从MCU/MPU选型&#xff0c;引脚配置&#xff0c;系统时钟以及外设时钟设置&#xff0c;到外设参数配置&#xff0c;中间件参数配置&#xff0c;它给STM32开发者们提供了一种简单&#xff0c;方便&a…

华为OD机试 - 积木最远距离(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

[Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)

快速搜索文件名及其所在路径 下载链接在文末 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 解压后得到文件 双击exe文件得到 选择简体中文&#xff0c;点击OK 点击“我接受” 更改安装目录&#xff0c;最好不要放在C盘&#xff0c;点击下一步 点击下一步 点…

使用SNAP工具处理Sentinel-1数据应注意磁盘和内存问题

近期使用SNAP处理数据比较多&#xff0c;有一些心得给大家分享一下&#xff01;在预处理Sentinel-1数据 的过程中出错基本上是有3种情况&#xff1a; 磁盘被写满 由于JAVA优化一般是通过空间换效率的方式。所以SNAP为了提高效率&#xff0c;本版本升级增加了数据本地缓存的比重…