【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程
作者:野牛程序员:2025-05-22 09:20:29算法阅读 2184
【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程
一、? 什么是递归(Recursion)?
递归,就是一个函数调用它自己的编程方式。
通俗理解:
问题太大?那就自己“拆自己”!
? 一个递归函数 = 函数本体 + 终止条件
二、? 用生活中的例子来理解
比如一本书的目录结构:
第1章 └── 第1节 └── 第2节 第2章 └── 第1节 └── 第1小节 └── 第2小节
每一章下面还有“子目录”,每一层都像是在调用自己一样——这就是递归的思想!
三、? 递归函数的基本结构
返回类型 函数名(参数) { if (终止条件) { // 直接返回,不再递归 } else { // 调用自己(递归) } }
四、? 实例讲解:阶乘函数 factorial(n)
阶乘定义:
n! = n × (n-1) × (n-2) × ... × 1
✅ 使用递归写法如下:
#include <iostream> using namespace std; // 计算 n 的阶乘,n! = n × (n-1) × ... int factorial(int n) { if (n == 1) return 1; // 终止条件 return n * factorial(n - 1); // 递归调用 } int main() { int n = 5; cout << "5的阶乘是:" << factorial(n) << endl; return 0; }
? 输出结果:
5的阶乘是:120
五、? 递归 vs 循环
项目 | 递归 | 循环 |
---|---|---|
思路 | 拆问题 -> 自调用 | 重复执行 |
内存 | 多次函数调用栈 | 少,占内存小 |
代码结构 | 简洁但不易调试 | 清晰易懂 |
性能 | 较慢 | 较快 |
六、? 递归常见错误
❌【忘记写终止条件】 → 死循环栈溢出
❌【终止条件写错】 → 不会停!
✅【建议】写递归前一定要画递归树图或纸面演算!
七、? 推荐练习题
练习1:打印 1 到 n 的正整数
#include <iostream> using namespace std; // 递归打印从1到n的数字 void print1ToN(int n) { if (n == 0) return; // 终止条件:打印到0结束 print1ToN(n - 1); // 先递归调用 cout << n << " "; // 再打印本层 } int main() { int n = 5; cout << "打印1到" << n << ":"; print1ToN(n); return 0; }
? 输出:
打印1到5:1 2 3 4 5
练习2:斐波那契数列(第n项)
#include <iostream> using namespace std; // 计算第n个斐波那契数(fib(1)=1, fib(2)=1) int fib(int n) { if (n == 1 || n == 2) return 1; // 终止条件 return fib(n - 1) + fib(n - 2); // 递归计算 } int main() { int n = 6; cout << "第" << n << "个斐波那契数是:" << fib(n) << endl; return 0; }
? 输出:
第6个斐波那契数是:8
⚠️ 提醒:该方法时间复杂度是指数级,后续可优化成记忆化递归或动态规划。
八、? 递归小口诀
递归要有头,终止必须有;
调自己一次,问题就变小;
层层剥皮法,答案自然好!
九、? 补充作业
1️⃣ 写一个递归函数求从 1 到 n 的和
2️⃣ 写一个递归函数判断一个正整数是否是回文数(例如 121)
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
