4.10 递归

Recursion

C functions may be used recursively; that is, a function may call itself either directly or indirectly.

递归是一个坎,更多有关递归的内容,可以在网上找找例子很多,在等到学数据结构的时候,你会更深刻理解递归。

递归是一个编程技巧,不是这一次就会了。只能慢慢去体会,什么场景适合递归?什么场景不适合递归?

用两个例子去体会递归

4.10.1 Print call myself

4.10.1 print-call.c
#include <stdio.h>

// 定义一个函数   unsigned int n   无符号整型

void Print(unsigned int n)
{

    if (n > 9)
    {
        Print(n / 10);
    }
    printf("%u ", n % 10); // 打印末尾   /n 进行换行  可有可无
}
// 上次测试:20231031
int main(void)
{
    unsigned int num = 0;
    scanf("%u", &num);
    // Print(num);

    Print(num);
    return 0;
}

跳出循环后,才开始执行第一次 printf() 语句

第二次打印:

减少重复代码量: 例如printf() 只写了一遍,

再思考一下,if语句是用来防止 “栈溢出” (死递归 death recursion)

局部变量、函数的形参、每一次函数的调用,都会在栈区申请空间。

stack overflow 栈溢出(栈区资源是有限的)

4.10.2 MyStrlen count character

编写函数不允许创建临时变量,求字符串长度。

Last updated

Was this helpful?