<>函数

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,
盘点国产PC操作系统哪家强?机房收费系统之组合查询自定义注解的方式的使用场景:解决业务分发CRC与模二除法的部分理解2021 年了,为什么还有人怀念手机呼吸灯?HVV 2020 | HVV期间漏洞总结「三」PHP中字符串的处理【Java知识点详解 3】序列化与反序列化vue 路由跳转四种方式 (带参数)航拍:特斯拉上海工厂Model Y已经大量下线