当前位置: 首页 > news >正文

AcWing 5933:爬楼梯 ← 递归 / 递推 / 高精度

【题目来源】
https://www.acwing.com/problem/content/5936/

【题目描述】
树老师爬楼梯,他可以每次走 1 级或者 2 级,输入楼梯的级数,求不同的走法数。
例如:楼梯一共有 3 级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共 3 种方法。

【输入格式】
输入包含若干行,每行包含一个正整数 N,代表楼梯级数。

【输出格式】
不同的走法数,每一行输入对应一行输出。

【数据范围】
单个输入最多包含 30 组数据。
1≤N≤
30

【输入样例】
5
8
10

【输出样例】
8
34
89

【算法分析】
● 递归:https://oi-wiki.org/basic/divide-and-conquer/
递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。
明白递归函数的作用并相信它能完成这个任务,千万不要跳进这个函数里面企图探究更多细节, 否则就会陷入无穷的细节无法自拔。

● 递推
递推法(recurrence method)是一种根据递推关系进行问题求解的方法,也是一种重要的数学方法,常用来进行序列计算。递推法能够将复杂的运算化解为若干重复的简单运算,充分发挥了计算机擅长重复处理的特点。
递推法通过初始条件,根据递推关系式,按照一定的规律逐项进行计算,直至得到结果。递推法有正推和逆推两种形式。无论正推还是逆推,关键都是要找到递推关系式。

● 高精度:
https://blog.csdn.net/hnjzsyjyj/article/details/144703201
本题中 N≤30,问题规模较小,可以不用高精度。
但洛谷 P1255(
https://www.luogu.com.cn/problem/P1255)与本题相比,除了 N 很大外极其类似,且需要用高精度。故用高精度也实现了一下此题。

【算法代码一:递归】

#include <bits/stdc++.h>
using namespace std;int f(int x) {if(x==0 || x==1) return 1;return f(x-1)+f(x-2);
}int main() {int n;while(cin>>n) {cout<<f(n)<<endl;}
}

【算法代码二:递推】

#include <bits/stdc++.h>
using namespace std;const int maxn=35;
int f[maxn];
int n;int main() {f[0]=1,f[1]=1;for(int i=2; i<=maxn; i++) {f[i]=f[i-1]+f[i-2];}while(cin>>n) {cout<<f[n]<<endl;}
}

【算法代码三:高精度】

#include <bits/stdc++.h>
using namespace std;string hiAdd(string a,string b) {string c;int t=0;int i=a.size()-1,j=b.size()-1;while(i>=0 || j>=0) {if(i>=0) t=(a[i]-'0')+t;if(j>=0) t+=(b[j]-'0');c+=(t%10+'0');t/=10;i--,j--;}if(t!=0) c+=(t+'0');reverse(c.begin(),c.end());return c;
}int main() {int n;while(cin>>n){string f[n+5];f[0]=f[1]="1";for(int i=2; i<=n; i++) {f[i]=hiAdd(f[i-1], f[i-2]);}cout<<f[n]<<endl;}return 0;
}/*
in:
4out:
5
*/



【参考文献】
https://www.acwing.com/solution/content/253657/
https://www.acwing.com/solution/content/254309/

 



 


http://www.mrgr.cn/news/92666.html

相关文章:

  • 本地部署Deepseek+Cherry Studio
  • 自然语言处理(NLP):文本向量化从文字到数字的原理
  • PHP女程序猿学习Java的Day-10
  • 毕业项目推荐:基于yolov8/yolo11的野生菌菇检测识别系统(python+卷积神经网络)
  • Open3D的python API文档含义
  • Spring 循环依赖解析与解决方案
  • DeepSeek写俄罗斯方块手机小游戏
  • [Web 安全] 反序列化漏洞 - 学习笔记
  • 登录次数限制
  • 【每日八股】MySQL篇(四):索引(下)
  • Android OpenGLES2.0开发(十一):渲染YUV
  • 如何使用 Ollama 的 API 来生成文本
  • Qt互斥锁(QMutex)的使用、QMutexLocker的使用
  • ubuntu22.04系统如何自建2级ntp服务器
  • PySide(PyQT)重新定义contextMenuEvent()实现鼠标右键弹出菜单
  • 从“记住我”到 Web 认证:Cookie、JWT 和 Session 的故事
  • 【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
  • 在VSCode 中使用通义灵码最新版详细教程
  • Trae根据原型设计稿生成微信小程序密码输入框的踩坑记录
  • 【强化学习笔记1】从强化学习的基本概念到近端策略优化(PPO)