ACM模拟题详解(4)——递归

ACM入门算法之---递归专场 递归算法就是在函数或子过程的内部,直接或者间接地调用自己的算法,在ACM中它是一个入门级的算法,题目一般非常简单。它一般解决三类问题: (1) 数据的定义是按递归定义的。(Fibonacci函数) (2) 问题解法按递归算法实现。(回溯) (3) 数据的结构形式是按递归定义的。(树的遍历,图的搜索) 递归算法解决问题的特点: (1) 递归就是在过程或函数里调用自身。 (2) 在使用递归 阅读详情

    递归在解决一些问题的时候非常直观,但是在是使用递归的时候要注意递归的深度,如果深度太深,可能会造成堆栈溢出。下面通过实例介绍如何使用。

题目:超级楼梯
Problem Description
有一楼梯共M 级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M 级,共有多少种走法?
Input
输入数据首先包含一个整数N ,表示测试实例的个数,然后是N 行数据,每行包含一个整数M (1<=M<=40 ), 表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2
2
3
Sample Output
1
2
 
解题思路:这类题目首先要找到规律,可以试着写出M 比较少的情况,然后从中找规律。例如:
M  走法
1
2 1-2
3 1-3 (从1 走两级)1-2-3 (从2 走一级)
4 1-2-4 (从2 走两级) 1-2-3-4 1-3-4 (从3 走一级)
5 1-2-3-5 1-3-5 (从3 走两级) 1-2-3-4-5 1-2-4-5 1-3-4-5 (从4 走一级)
6 1-2-4-6 1-2-3-4-6 1-3-4-6 (从4 走两级)
1-2-3-5-6 1-3-5-6 1-2-3-4-5-6 1-2-4-5-6 1-3-4-5-6 (从5 走一级)
…
n n-2 层的所有走法走两级可以到达n 层,n-1 层的所有走法走一级可以到达n 层
n 层的走法可以表示为f(n) ,则f(n)=f(n-1)+f(n-2) ,n>4
这样就可以用递归计算了。参考代码如下:
       /*
        * 超级楼梯
        */
       public static int test7(int n){
              switch(n){
                     case 1:return 0;
                     case 2:return 1;
                     case 3:return 2;
                     default:return test7(n-1)+test7(n-2);
              }
       }
对于这种题目来说,使用递归速度并不快,并且递归太深的话会溢出,可以采用循环来处理,可以参考下面的代码:
       /*
        * 超级楼梯
        */
       public static int test7(int n){
              int[] result = new int[40];
              result[0] = 0;
              result[1] = 1;
              result[2] = 2;
              for(int i=3;i<n;i++){
                     result[i] = result[i-1]+result[i-2];
              }
              return result[n-1];
       }

李绪成 优快云 Blog:http://blog.youkuaiyun.com/javaeeteacher
优快云学生大本营:
http://student.youkuaiyun.com/space.php?uid=124362
如果喜欢我的文章,就加我为好友:
http://student.youkuaiyun.com/invite.php?u=124362&c=7be8ba2b6f3b6cc5

华为机试编程模拟题9:题型规则、算法考点与ACM模式实战详解 动态规划、图遍历与ACM模式输入输出是算法笔试中的高频考查方向。理解状态定义与转移方程,掌握DFS/BFS的visited标记技巧,能有效解决最大不相邻和、连通块面积等经典问题。这些算法原理不仅服务于华为机试等企业编程考核,也广泛用于工程中的路径规划与资源调度场景。本文以华为机试编程模拟题9为载体,深入拆解题型分值、算法考点与编码细节,并给出Python、Java、C++实用模板,帮助求职者在真实笔试环境中规避超时、越界与格式陷阱,实现从刷题到拿分的转化。 阅读详情

相关推荐

acm之递归题目2

Problem Description今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由”E” “O” “F”三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能

Jancy的博客 907

acm入门——递归

对于递归的理解: 1、要有跳出递归的条件 2、不断地调用本身 注意:当满足跳出递归条件的时候,会返回上一层 例题: 杭电oj——一只小蜜蜂(http://acm.hdu.edu.cn/showproblem.php?pid=2044#top) ...

qq_43546060的博客 449

acm之递归题目1

Problem DescriptionThere are many students in PHT School. One day, the headmaster whose name is PigHeader wanted all students stand in a line. He prescribed that girl can not be in single. In other wor

Jancy的博客 1359

ACM详解(4)——递归

    递归在解决一些问题的时候非常直观,但是在是使用递归的时候要注意递归的深度,如果深度太深,可能会造成堆栈溢出。下面通过实例介绍如何使用。题目:超级楼梯Problem Description有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?Input输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(

李绪成的一亩三分地 5037

ACM博弈学习小结

1.ACM博弈题,不会的时候觉得难于上青天,会的时候觉得没有比博弈更水的题了; 博弈题看到的第一眼觉得是难题,代码敲完顿觉水题。你可能花半个小时去找规律,然后仅花2分钟敲代码。 2.博弈是单人游戏,也可以说是自己跟自己玩,因为“双方都做出最优决策”这一点限制了,最后的结果不取决 于你是谁,不取决于你的智商,只取决于你面对的局面; 3.局面,这是博弈里面最最最重要的东西!!!(所谓SG也是指这一局面的SG),博弈是一种不公平的游戏 因为游戏开始的时候已经结束了,影响你胜负的就是你所面对的局面,因为双方采取最优

Must so 7067

acm递归算法总结竞赛

acm递归算法总结acm递归算法总结!!!!!!!!!!!!!!!!!!!!!!!

acm程序设计——递归算法(心得)

递归算法学习心得与总结: 程序直接或间接调用自身的编程技巧称为(递归算法) 1.直接或间接的调用自身的函数成为递归函数。 2.递归常常把大而复杂的问题转化成规模较小的问题来求解。 递归的关键:找出递归定义和递归的终止条件 (1.循环递归定义是很重要的一步,需要有灵活的思维,可以通过举例多写几个步骤来找规律,最后找到递归定义。 2.可以寻找第n项和n-1项的关系。 3.可首先找到特殊项或显而易见的项...

qq_45897987的博客 367

深入解析 RLHF(Reinforcement Learning from Human Feedback)

随着人工智能(AI)技术的快速发展,大规模语言模型(如 OpenAI 的 GPT、Anthropic 的 Claude 等)已经能够生成高质量的文本。RLHF 是一种基于强化学习(Reinforcement Learning, RL)的优化方法,它结合人类反馈(Human Feedback)来训练奖励模型(Reward Model, RM),进而优化语言模型的生成策略。整个强化学习的目标是找到最优策略 π∗\pi^*π∗,使得模型在与环境交互的过程中,最大化累积奖励。RLHF 是一种结合强化学习(RL)

lqq 1774

【ACM算法】-- 搜索篇 - 递归的应用

第一题: 思路: 这是有名的素数环问题,由输入得知,输入的数据范围是小于17的,所以两数之和是小于34的,即只需要找出小于34的所有素数即可。 对于递归这里,这道题要求打印出所有数据,并且每个数都只能用一次。递归的问题可以看成对于树的深搜问题,对于当前状态,总的来说,也就是长远来看,需要扩展出他所能走的所有状态,但是就目前来看,他只需要在当前状态下一直走下去,直到走不了为止,这相当于走路,...

风一样的少年 227

佳能C3025打印机扫描方法

佳能C3025彩色打印机扫描方法 步骤一、如果打印机处于休眠状态,可按图中标记的按钮唤醒打印机; 然后点击屏幕上的【扫描】 步骤二、扫描类型选择【文件】 步骤三、点击屏幕上的【地址簿】 步骤四、此时屏幕胡看到名字,如果看不到自己的名字,可往下滑动直到看到自己的名字,然后点击自己的名字,再点击右下角的【应用】 步骤五、点击【发送设置】,可看到文件格式为PDF,点击可以选择JPEG的图片格式。...

weixin_46019317的博客 2万+

大模型微调框架之TRL

近年来,大语言模型(LLMs)的快速发展推动了下游应用的繁荣,但如何高效地对这些模型进行对齐和微调,依然是研究与应用的热点。Hugging Face 开源的 TRL(Transformer Reinforcement Learning) 框架,提供了基于强化学习的语言模型训练方法,并支持 SFT(监督微调)、PPO(近端策略优化)、DPO(直接偏好优化)等多种方式,是目前对齐和微调 LLM 的重要工具。

和大家一起涨芝士 905

ACM做题细节!

1.   如果题目是枚举的话,即最后化成十分简单的形式比较小,       可以直接将各种不同状态的结果运算过程写出来,但是这并不见得比写函数要快多少       而且比较容易出错,比如下标没有更改之类,这种错误比较烦人,因为你会查看算法,       但是算法本身并没有错误,所以如果复制粘贴的话,注意不同情况的不同点,如果自己       不够细心,最好写成函数的形式(注意判断边界),以

architect19的专栏 1752

Ubuntu20.04 安装 MATLAB R2023b 常见问题及解决方案

本文提供了Ubuntu20.04系统上安装MATLAB R2023b的完整指南,包括系统要求检查、依赖项安装、详细安装步骤及常见问题解决方案。特别针对GTK模块加载失败、OpenGL图形加速问题和中文显示乱码等常见问题提供了有效解决方法,帮助用户顺利完成安装并优化使用体验。

weixin_42619061的博客 487

一道简单的ACM递归题

编写递归函数Acm(m,n)实现如下图所示的Acm函数,其中m、n为正整数。例如:Acm(2,1)=5,Acm(3,2)=29。 Acm(m,n) = \begin{cases}n+1&(m=0) \Acm(m-1,1)&(n=0) \Acm(m-1,Acm(m,n-1))&(m>0,n>0) \end{cases} 输入m和n两个整数,输出Acm(m,n)。如...

韶言大雅 2649

如何用Arduino和HX711压力传感器制作一个简易电子秤(含OLED显示)

本文详细介绍了如何使用Arduino、HX711压力传感器和OLED显示屏制作一个简易电子秤。从硬件连接到软件编程,提供了分步教程,包括核心元件功能解析、接线方法、库安装、模块测试以及关键的校准流程。项目实践性强,适合创客和DIY爱好者学习嵌入式系统与传感器应用。

tea88的博客 536

获取微信公众号历史文章列表页链接

action=home&__biz=这里替换你的biz==4、链接分享、发送到微信即可访问,注意该链接仅可在微信客户端使用,外部浏览器无法打开。3、拼接通用公式生成链接即为微信公众号历史文章列表链接。,如下图找到红框部分值,复制即为上文biz值。2、浏览器右键查看网页源码,新开页面搜索(1、复制公众号任意文章的链接在浏览器打开。

珞瑜的博客 7962

ACM--递归效率的比较

测试用例: 2 1 2 3 50 改进前的代码(用递归的方法): #include using namespace std; int main() { long long getStep(int, int); int n,a,b; cin>>n; while(n--) { cin>>a>>b; cout<<getStep(a,b)<<endl; } return

路漫 1122

【光子 AI 】应用 LangGraph 的核心模型和算法原理,完整实现一个极简版的 Agent 开发框架源代码,并给出具体的应用测试实际项目案例

下面给出一个“极简版 LangGraph 风格 Agent 框架”的完整可运行实现:用 有向图 + 状态(State) + 节点(Node) + 条件路由(Conditional Edge) + 循环(Loop) + Checkpoint 这一套核心模型/算法,把 Agent 组织成可编排、可测试的状态机工作流(这正是 LangGraph 的核心抽象之一:以 StateGraph 组织节点,节点读写共享状态,边做路由与循环,并支持持久化/回放)。 参考概念来源:LangGraph 官方文档对 “StateG

AI天才研究院 271

关于对ACM OJ大数据递归 栈溢出 问题的解决方案

关于对ACM OJ大数据递归栈溢出问题的解决方案 本文章大部分是引用 晚晴小筑 的博客,http://blog.youkuaiyun.com/x_iya/article/details/817113晚晴小筑8  ,当然,过程中穿插了自己的想法! 解决方案 对于内存限制,除了SGU的OJ,各个题库所给出的限制一般是很宽松的(卡内存题目除外),最小也有32MB(32768KB)。然而,大部分评测机的栈空间

Fighting! 3009

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1758

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2025年ACM大一训练递归——NEFU

acm递归练习

ljzzzzz的博客 604

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一周acm学习总结——递归算法

一周acm学习总结——递归算法 1.我的理解 递归算法简而言之,就是将复杂问题层层转化成一个小问题,函数自己调用自己; 2.老师一直强调难点在于找出结束的终止条件,但在我自己做题过程中反而觉得最难的在于找出递归关系来,对于我一个数学不好的人来说,找出递归关系,找出规律真的好难。 3.在写代码过程中发现了自己本身存在的很多问题,都是上学期没学好所致,比如字符数组的使用,字符数组的传参等等 4.pel...

qq_45955682的博客 368

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

『ACM』ACM模板合集

ACM模板整理: 数学: 数论–康托展开与逆康托展开模板 数论–组合数(卢卡斯+扩展卢卡斯)模板 数论–Miller_Rabin判断素数 数论–中国剩余定理模板 数论–逆元(拓展欧几里得)模板 数论–逆元(费马小定理)模板 数学–数论–因子和线性筛 (模板) 数学–数论–随机算法–Pollard Rho 大数分解算法(纯模板带输出) 数学–数论–快速幂–最大公约数–位运算模板 线性筛求积性...

日拱一卒,功不唐捐 8282
上一篇: ACM详解(4)——递归
下一篇: ACM详解(5)——排序
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值