蓝桥杯基础--递归

发布时间:2026/6/19 13:47:00

蓝桥杯基础--递归 目录1. 递归简介2. 递归实现3. 递归与循环4. 例题4.1斐波那契数列4.2数的计算在蓝桥杯以及各大算法竞赛中有很多问题看似错综复杂但如果换一种思维方式将其“大事化小”问题就会迎刃而解。这种思维方式在代码中的具体体现就是我们今天要探讨的核心算法——“递归”。1. 递归简介递归Recursion从字面意思上理解就是“递去”和“归来”。在编程语言中递归表现为一个函数在它的函数体内部直接或间接地调用自身。通俗地讲递归就像是你在排队时不知道自己是第几个人于是你问前面的人他是第几个前面的人也不知道他又去问更前面的人……这个不断向前询问的过程就是“递”直到问到第一个人他明确知道自己是第一名然后把结果告诉第二个人第二个人再告诉第三个人依次向后传递直到传回给你这个传递结果的过程就是“归”。递归算法非常适合解决那些具有“自相似性”的问题也就是大问题可以被拆解为结构完全相同的若干个小问题。2. 递归实现要用代码完美地实现一个递归通常需要牢牢把握住以下三个核心要素第一步明确函数的功能。在动手写代码前先不要去想里面的细节而是先在脑海中或者草稿纸上定义好这个函数接收什么参数返回什么结果它到底要完成一件什么样的事情。第二步寻找递归的边界条件递归出口。这是递归最重要的一步计算机的内存是有限的函数不可能无休止地调用下去。我们必须找到一个极其简单、不需要再继续拆解就能直接得出答案的条件让递归在这一步停下来并开始返回。如果漏写了边界条件程序就会陷入死循环最终导致内存爆栈Stack Overflow。第三步找出递归的推导关系状态转移。也就是思考如何把当前规模较大的问题转化为规模较小、但逻辑相同的同类问题。3. 递归与循环很多初学者在学习递归时经常会把它和循环for 或者 while拿来做比较。实际上递归和循环在很多场景下是可以相互转换的。思维方式循环通常是一种“自底向上”的思维从最基础的初始状态开始一步步迭代推导到最终目标而递归是一种“自顶向下”的思维先从最终目标入手层层向下拆解直到遇到边界条件再向上回归。代码风格递归的代码往往非常简洁、优雅高度贴合数学公式的定义可读性很强而复杂的循环有时候会嵌套多层显得有些臃肿。性能开销由于每次函数调用都需要在内存中开辟栈空间来保存局部变量和返回地址所以递归的内存开销通常比单纯的循环要大。如果没有做好优化例如缺乏记忆化纯暴力的递归可能会导致时间超限。但在蓝桥杯中掌握基础递归是学习后续高级算法如深度优先搜索 DFS、动态规划 DP的必经之路。4. 例题下面我们结合两道经典的蓝桥杯真题来看看递归是如何在实战中发挥作用的。4.1斐波那契数列https://www.lanqiao.cn/problems/1534/learning/?page1first_category_id1name%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0#include iostream using namespace std; using ll long long; ll fib(int x) { if(x 0) return 0; if(x 1 || x 2) return 1; return fib(x- 1) fib(x - 2); } int main() { int n; cin n; cout fib(n) \n; return 0; }4.2数的计算https://www.lanqiao.cn/problems/760/learning/?page1first_category_id1problem_id760#include bits/stdc.h using namespace std; int f(int x) { int res 1; for(int i 1; i x / 2; i) { res f(i); } return res; } int main() { int n; cin n; cout f(n) endl; return 0; }本章完。

相关新闻