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
#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?