<>函数

c语言是一种面向过程的高级语言

打开VS安装路径就可以看到封装好的库函数的头文件.h及其实现的.c文件c,其实有的库函数封装了系统调用函数,调用库函数就可以间接调用系统调用

拿库函数strlen来举个栗子,strlen是计算字符串字符个数的函数,位于string.h头文件下
#include <stdio.h> #include <string.h> int main() { char str[] = "producing!";
printf("%d", strlen(str)); return 0; }
模拟实现一下strlen

递归实现strlen
//递归实现strlen #include <stdio.h> int strlen_self(char* ch) { if (*ch == '\0')
return 0; return 1 + strlen_self(ch + 1); } int main() { char st[10] =
"ASDFGHJKL"; printf("%d\n", strlen_self(st)); return 0; }
非递归实现strlen
//非递归实现strlen #include <stdio.h> int strlen_self(char* ch) { int sum = 0; while
(*ch++ != '\0') { sum++; } return sum; } int main() { char st[10] = "ASDFGHJKL";
printf("%d\n", strlen_self(st)); return 0; }
库函数是人为封装好的供程序开发人员使用的成熟的安全的函数,避免了重复造轮子的时间开销,提高了程序开发的效率和缩短了时间周期

<>递归

程序调用自身的编程技巧称为递归( recursion)。递归是一种分治的思想,将大规模的一系列相同操作的作业分成若干相同操作的小作业从而简化步骤。
<>递归的两个必要条件:
*
存在限制条件,当满足这个限制条件的时候,递归便不再继续。

*
每次递归调用之后越来越接近这个限制条件。

从上面递归模拟实现strlen函数的函数出发,我们对递归的过程进行分析

为了方便观察和追踪理解递归的过程,我们将st初始化为字符串"ASD"
//递归实现strlen #include <stdio.h> int strlen_self(char* ch) { if (*ch == '\0')
return 0; return 1 + strlen_self(ch + 1); } int main() { char st[4] = "ASD";
printf("%d\n", strlen_self(st)); return 0; }
我们观察函数栈帧就可以发现,strlen_self函数总共调用了4次,栈帧出栈的过程便是递归归的过程

不断出栈…

直到栈中只剩余main函数的帧

便会在main函数中得到strlen_self的返回值

技术
©2019-2020 Toolsou All rights reserved,
TypeScript:函数类型接口8道大厂指针笔试题让你秒杀指针!!!MySQL 日期时间加减mysql 查询条件之外的数据_mysql 查询符合条件的数据查linux的操作系统版本,如何查看Linux操作系统版本?将String类型转换成Map数据类型使用uuid做MySQL主键,被老板,爆怼一顿C语言中的字符串函数和字符函数linux服务器中毒排查--基础篇C# ASCII码字符转换