递归(-9999基础教学)

什么是递归?

是递“龟”吗?No,no!

给你们讲个故事

从前有个小博客,博客里有个up猪,up猪给大家讲故事,故事说从前有个小博客,博客里有个up猪,up猪给大家讲故事,故事说从前有个小博客,博客里有个up猪.........

这个故事有个特点,在故事中提到同样的故事。

而这就是递归的核心理念

函数就像一个故事,函数中调用自己就是递归

好了回到编程领域,递归是一种编程技术,它允许函数调用自身来解决问题。递归通常用于解决可以被分解为相同类型的较小问题的问题。递归函数通常包含两个部分:

  1. 基本情况:这是递归的终止条件,当满足这个条件时,函数不再调用自身,而是直接返回结果
  2. 递归情况:这是函数调用自身的地方,通过将问题分解为更小的子问题来实现(如下图)

递归的一个经典例子是计算阶乘。阶乘的定义是:

  • n!=n×(n−1)×(n−2)×…×1n!=n×(n−1)×(n−2)×…×1
  • 基本情况是 0!=1

c++代码框架

#include <iostream>
using namespace std;

// 递归函数计算阶乘
int factorial(int n) {
    // 基本情况
    if (n == 0) {
        return 1;
    }
    // 递归情况
    else {
        return n * factorial(n - 1);
    }
}

int main() {
    int n = 5;
    cout << "Factorial of " << n << " is " << factorial(n) << endl;
    return 0;
}

python代码框架


# 递归函数计算阶乘
def factorial(n):
    # 基本情况
    if n == 0:
        return 1
    # 递归情况
    else:
        return n * factorial(n - 1)

# 测试
n = 5
print(f"Factorial of {n} is {factorial(n)}")

详细说明

  1. 基本情况:在上述代码中,if (n == 0) 或 if n == 0 是基本情况。当 n 为 0 时,函数直接返回 1,不再进行递归调用。
  2. 递归情况:在 else 分支中,函数调用自身 factorial(n - 1),将问题规模缩小,直到达到基本情况。

递归的优缺点

  • 优点:递归可以使代码更简洁更易读,特别是对于那些可以自然分解为子问题的问题。
  • 缺点:递归可能会导致栈溢出,因为每次递归调用都会增加栈的深度。此外,递归有时不如迭代效率高,因为每次递归调用都需要保存当前的执行上下文。

递归的应用

递归广泛应用于各种算法和数据结构中,例如:

  • 树的遍历:前序、中序、后序遍历。
  • 图的遍历深度优先搜索(DFS)。
  • 分治算法:如快速排序、归并排序。
  • 动态规划:如斐波那契数列背包问题。

通过理解递归的基本原理和应用,可以更好地设计和实现高效的算法

所以你学会了吗,还没学会就......

关注

当谈到递归函数时,C语言是一个很好的起点。递归是一种函数调用自身的技术,它可以用来解决许多问题,特别是涉及到重复性的任务。下面是一个简单的C语言递归函数的入门教学: 1. 确定递归的终止条件:每个递归函数都必须有一个终止条件,否则它将无限地调用自身。这个终止条件通常是在问题被分解到一定程度后得到满足。 2. 定义递归函数:在函数内部,你需要定义递归函数的基本操作。这些操作可以是求解问题的一部分,或者是将问题分解为更小的子问题。 3. 调用递归函数:在递归函数内部,你需要调用自身来解决更小的子问题。这个调用应该是在满足终止条件之前进行的。 4. 处理递归函数的返回值:递归函数通常会返回一个值,这个值可以被用来构建更大的解决方案。你需要在每一层递归中正确处理返回值。 下面是一个经典的例子,展示了如何使用递归来计算一个数的阶乘: ```c #include <stdio.h> int factorial(int n) { // 终止条件 if(n == 0) { return 1; } // 递归调用 return n * factorial(n-1); } int main() { int num = 5; printf("Factorial of %d is %d", num, factorial(num)); return 0; } ``` 在这个例子中,递归函数 `factorial` 接收一个整数作为参数,并返回这个整数的阶乘。终止条件是当输入为0时,返回1。否则,递归调用 `factorial` 函数来计算 `n` 的阶乘。 希望这个简单的入门教学能帮助你理解C语言中的递归函数。如果你有更多问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值