当前位置:首页算法 > 正文

【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程

作者:野牛程序员: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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 【少儿编程入门】递归函数到底是啥?一文讲懂 + 实战练习!-野牛程序员讲少儿编程
  • 相关推荐

    最新推荐

    热门点击