算法设计与分析之递归进阶练习五题
创始人
2025-05-28 10:40:07

一个不知名大学生,江湖人称菜狗
original author: jacky Li
Email : 3435673055@qq.com

Time of completion:2023.3.15
Last edited: 2023.3.15

导读:

帮助算法设计初学者快速掌握算法设计,学习递归的思想,使得Quiet明白反反复复、永无直接才是真理!

目录

递归进阶练习

第1关:阿克曼函数

参考代码

第2关:斐波那契数列

参考代码

第3关:青蛙跳台阶问题

参考代码

第4关:猴子吃桃问题

参考代码

第5关:苹果分筐问题

参考代码

作者有言


递归进阶练习

第1关:阿克曼函数

任务描述

本关需要你根据公式来编写一个递归函数的程序,且输出答案。

相关知识

Ackerman函数是双递归函数,它的递归方程是:

编程要求

编写递归函数Acm(n,m)实现如下图所示的Acm函数,其中m、n为正整数。例如:Acm(2,1)=4,Acm(3,3)=16

输入nm两个整数,输出Acm(n,m)。如果n小于0或m小于0,则返回-1。

输入:2 1

输出:4

参考代码

#include 
using namespace std;
int Acm(int n,int m)
{if(n == 1 && m == 0) return 2;if(n == 0 && m >= 0) return 1;if(n >= 2 && m == 0) return n + 2;if(n >= 1 && m >= 1) return Acm(Acm(n - 1, m), m - 1);if(n < 0 || m < 0) return -1;
}
int main()
{int n, m; scanf("%d%d", &n, &m);int ans = Acm(n, m);printf("%d", ans);return 0;
}

第2关:斐波那契数列

任务描述

本关需要你用递归函数实现斐波那契数列。

相关知识

斐波那契数列公式为:

F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)

编程要求

请用递归函数实现斐波那契数列,在主函数中调用该递归函数,输出第n项的值。

效果如下:

输入:3

输出:2

参考代码

#include 
using namespace std;
int F(int n)
{if(n == 1) return 1;if(n == 2) return 1;if(n >= 3) return F(n - 1) + F(n - 2);
}
int main()
{int n; cin >> n;cout << F(n) << endl;return 0;
}

第3关:青蛙跳台阶问题

任务描述

本关任务:一只小青蛙,每次跳台阶,他可以一下跳一个台阶,或者两个台阶,问假设有n个台阶,这只青蛙一共有多种跳的方法。

题目分析

假设小青蛙最后站在第n阶梯,那么它最后一次是怎么跳上来的呢?可以是跳一级上来,也可以是跳两级上来。假设f(n)是小青蛙跳到n个台阶的方法数。

编程要求

根据提示,在右侧编辑器补充代码,计算n个台阶共有多少总跳法。

测试说明

平台会对你编写的代码进行测试,需要输入的台阶数是大于等于1的整数,如果小于等于0,则返回-1。

测试输入:2

预期输出:2

测试输入:5

预期输出:8

参考代码

#include
using namespace std;
int frog(int n)
{if(n <= 0) return -1;if(n == 1) return 1;if(n == 2) return 2;if(n >= 3) return frog(n - 1) + frog(n - 2);
}
int main()
{int n; cin >> n;cout << frog(n) << endl;return 0;
}

第4关:猴子吃桃问题

任务描述

猴子第一天摘下若干个桃子,当天吃了一半,后面又多吃一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。后面每天猴子都吃了前一天剩下的一半零一个。到第10天想再吃时,只剩下一个桃子。问第一天共摘了多少桃子。 如果仍然是这种吃法,第15天再吃时,也是只剩下一个桃子,那第一天摘的桃子数又是多少?

题目分析

  • 可以倒着思考,第15天为最后一天,设桃子数为S(15)
  • 已知S(15)=1,第14天,设为S(14),去掉它的一半多1个就是S(15).
  • 只要根据S(n-1)S(n)的关系,就可以用递归求解得到S(1)

编程要求

根据提示,在右侧编辑器补充代码,求解到第n天想再吃时,只剩下一个桃子,第一天共摘的桃子数。

测试说明

当输入的天数n小于1时,返回-1. 平台会对你编写的代码进行测试:

测试输入:4

预期输出:22

参考代码

#include
using namespace std;
int PeachNumber(int n)
{static int sum = 1;if(n == 1) return sum;else {sum = (sum + 1) * 2;return PeachNumber(n - 1);}
}
int main()
{int n; cin >> n;if(n < 1) cout << -1 << endl;else cout << PeachNumber(n) << endl;return 0;
}

第5关:苹果分筐问题

任务描述

本关任务:有n个苹果,现分成k筐,每筐不能为空,有多少种分法? 比如7个苹果成3筐,可以是{1,1,5}, 但这里不考虑顺序,比如我们认为{1,1,5}{1,5,1}{5,1,1}是同一种分法。

一种思路

  1. 考虑第1筐,假设放入i个苹果,它不能大于kn​,因为大于该数,就会产生重复的划分。
  2. 剩下的n-i个苹果,继续放到k-1个筐,它的个数不能多于k−1n−i​,不能少于前一筐个数。
  3. 直到k==1为止。
  • 比如输入 7 3
  • 按该方法第1筐可放1或2
  • 当第1筐放1时,第2筐可以放1或2或3
  • 当第1筐放2时,第2筐只可放2或3
  • ...
    第1筐第2筐第3筐
    115
    124
    133
    223

输入格式

两个整数n,k,(6,中间用单个空格隔开。

输出格式

一个整数,即不同分法。

测试说明

平台会对你编写的代码进行测试:

测试输入:7 3

预期输出:4

参考代码

#includeusing namespace std;//n个苹果分k筐,now是当前筐最少几个苹果int divideNumber(int n,int k,int now){int ans = 0;if(k == 1) return 1;else{for(int i = now; i <= (n / k); i ++)ans = ans + divideNumber(n - i, k - 1, i);}return ans;}int main(){int n, k, now = 1; cin >> n >> k;cout << divideNumber(n, k, now)<< endl;return 0;}

作者有言

如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

相关内容

热门资讯

滨江集团上半年斩获 16 宗地... 乐居财经 严明会 6月27日,杭州2025上半年最后一次土拍结束,共推出6宗宅地,滨江集团竞得2宗地...
长沙两宗涉宅地成交6.35亿元 土拍日报 6月27日,长沙出让两宗涉宅用地,总成交金额6.35亿元。 其中位于芙蓉中心的[2025...
原创 帮... 各位朋友,我是帮主郑重。最近市场最热闹的戏码,莫过于特朗普和美联储的“降息博弈”了。今天咱们就来聊聊...
【南篱/黄金】PCE会成黄金的... 2025.06.27 周五 文/南篱 各位好,我是南篱,一个财经人。 刚说完黑天鹅,它就飞来了,我...
极易科技IPO:线上业务收入萎... 每经记者|王琳 每经编辑|张海妮 苏州极易科技股份有限公司(以下简称极易科技)正冲刺港交所IPO(...
蚂蚁消金2024年可持续发展报... 6月27日,重庆蚂蚁消费金融有限公司(以下简称“蚂蚁消金”)发布《2024年可持续发展报告》,阐述可...
数字教育上市公司财报大比拼:A... 作者|超新星财经 编辑|Ray 近期,高途(GOTU)、一起教育(YQ)、尚德机构(STG)、网易有...
读懂IPO|上海拓璞从科创板转... 本文来源:时代商业研究院 作者:陈丽娜 来源丨时代商业研究院作者丨陈丽娜编辑丨郑琳两度冲刺科创板均撤...
证监会严查财务造假案件 首次对...   中新经纬6月27日电 证监会网站27日消息,近日,证监会对南京越博动力系统股份有限公司(简称越博...
年轻人扶腰直上,老年人不敢挂号... 我们似乎正面临一场“慢性崩溃”,不分地域。地球分裂成两个世界:一半人口,缺医少药,连最基础的医疗服务...
华安证券解码新消费核心驱动力 ... 21世纪经济报道记者李域 深圳报道6月25日至26日,华安证券2025年中期策略会在上海陆家嘴召开。...
直击浦发银行股东大会!120亿... 本文来源:时代周报 作者:黄宇昆6月27日,浦发银行(600000.SH)召开2024年度股东大会,...
市占率92%,1000亿药茅,... 平稳有余,动力不足。云南白药,陷入业绩增长瓶颈期。一来,净利润“原地踏步”。自从2020年,公司净利...
告别5%限制!沪深主板ST股涨... 沪深交易所拟将主板风险警示股票价格涨跌幅限制比例由5%调整为10%。6月27日,上海证券交易所(下称...
刚刚!10万亿,集体杀跌!发生... 今天,银行股进行了大调整! 在经历了连续的拉升之后,板块市值超10万亿元的银行板块今天整体杀跌。青岛...
【财经早晚报】哈佛公布涉国际学... 今天值得关注的国内外新闻有: 1. 反不正当竞争法完成修订 自2025年10月15日起施行 2. 现...
溢价率55.91%!金茂集团1... 乐居财经 严明会 6月27日,杭州拱墅区运河新城单元核心地块(杭政储出[2025]80号)成功出让。...
YU7爆单了,但小米AI眼镜还... 文 | 周天财经周天财经 原创出品全市场都在等一个划时代的AI眼镜,一个全新入口和交互生态的杀手级产...
天风证券牵头,全国首单“专项用... 天风证券通过精准金融赋能科技产业创新,为新质生产力培育注入持续动能。近日,无锡市象云投资有限公司(以...
规模仅6000份?!好“精致”... 同泰产业升级可能是当前市场上最小的一只基金了。6070份,9877元,这就是它截至今年一季度末的规模...
第一代全固态电池明年推出!亿纬... 尽管当前锂电池企业竞争激烈且市场格局基本由“双雄”强势奠定,但包括一些老牌玩家在内的其他主体仍然对未...
中东留学:用孤独换机遇,中国学... 作者|李小天今年2月,即将从国内top2高校硕士毕业的苏云天,从北京出发,飞行十余个小时抵达沙特红海...
理想成立“智能汽车群组”马东辉... 理想汽车正积极布局,成立了“智能汽车群组”,由马东辉领衔带队。马东辉凭借其丰富的行业经验和卓越的领导...
银发“她经济”崛起,得“姐姐”... “银发‘她经济’崛起,得‘姐姐’者得天下。”在当今社会,随着老龄化进程的加速,老年女性群体的消费能力...
“试水”产品搅动二级市场,AI... 受益于小米集团(1810.HK)发布旗下首款AI眼镜,6月27日,AI眼镜概念高开,相关成分股冲高回...
ST百利:申请撤销公司股票其他... 6月27日,湖南百利工程科技股份有限公司(ST百利,603959.SH)公告,根据《上海证券交易所股...
2.64亿元资金抢筹大位科技,... 6月27日,上证指数下跌0.7%,深证成指上涨0.34%,创业板指上涨0.47%。盘后龙虎榜数据显示...
柠檬价格暴涨,茶饮龙头考虑改配... 作者:贺泓源 李晴 编辑:张伟贤 陈晓平 图源:视觉中国柠檬价格,居高不下。北京新发地官网数据显示,...
秦洪看盘|浮现新交易逻辑,动量... 周五A股市场出现了分化态势。其中,前期领航的银行股出现盘中冲高受阻后回落的态势,上证综指、上证50指...
商务部答时代周报:支持中国企业... 本文来源:时代周报 作者:阿力米热近日,以“团结协作、共谋发展”为主旨,斯里兰卡担任主题国的第9届中...