【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程
作者:野牛程序员:2025-05-22 09:20:29算法阅读 2329
【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程
一、? 什么是递归(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

