【c语言】一个例子明白递归,简单递归实现遍历数组(附图)

 递归概念

递归是一种在函数定义中使用函数自身的编程技术。在递归过程中,函数将问题分解为规模较小的子问题,并通过调用自身来解决这些子问题。递归通常用于解决可以被拆分成相似子问题的问题。

递归包含两个关键部分:

  1. 基本情况(Base Case): 定义了递归的终止条件。当函数达到基本情况时,不再继续递归调用,而是返回一个直接的结果。

  2. 递归步骤(Recursive Step): 定义了将问题分解为更小规模的子问题的方法,并通过递归调用自身来解决这些子问题。

递归的例子包括阶乘计算、斐波那契数列、二叉树的遍历等。在使用递归时,需要小心处理基本情况,以防止出现无限递归的情况。

举例代码

#include <stdio.h>
#include <string.h>

int len;

// 递归函数,输出字符串每个字符及递归层次信息
void digui(char shuzu[], int x) {
    // 基本情况:当达到字符串末尾时终止递归
    if (x == len) {
        return;
    }

    printf("进入递归第 %d 层\n", x);
    printf("第 %d 层输出的字符是 %c\n", x, shuzu[x]);

    // 递归调用自身,处理下一个字符
    digui(shuzu, x + 1);

    printf("返回递归第 %d 层\n", x);
}

int main() {
    char str[] = { "abcd" };
    len = strlen(str);
    
    // 调用递归函数,从第0层开始
    digui(str, 0);

    return 0;
}

 运行结果

过程分析

  1. main 函数中调用 digui(str, 0)

    • shuzu 被设置为字符串 "abcd"。
    • x 初始为0。
  2. 进入递归的第0层:

    • 打印进入递归的信息。
    • 输出第0层的字符 'a'。
    • 递归调用 digui(shuzu, 1)
  3. 进入递归的第1层:

    • 打印进入递归的信息。
    • 输出第1层的字符 'b'。
    • 递归调用 digui(shuzu, 2)
  4. 进入递归的第2层:

    • 打印进入递归的信息。
    • 输出第2层的字符 'c'。
    • 递归调用 digui(shuzu, 3)
  5. 进入递归的第3层:

    • 打印进入递归的信息。
    • 输出第3层的字符 'd'。
    • 递归调用 digui(shuzu, 4)
  6. 进入递归的第4层:

    • 基本情况触发,x 已经等于字符串长度,返回。
  7. 返回递归的第3层:打印返回递归的信息。

  8. 返回递归的第2层:打印返回递归的信息。

  9. 返回递归的第1层:打印返回递归的信息。

  10. 返回递归的第0层:打印返回递归的信息。

(by 归忆)

猜你喜欢

转载自blog.csdn.net/qq1677852098/article/details/135014256
今日推荐