<>函数

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,
Element-Ui组件 Message 消息提示, alert 弹窗Java:案例理解-接口回调element-ui踩坑记录【Golang 基础系列十】Go 语言 条件语句之if使用css样式设计一个简单的html登陆界面2020顺丰前端暑期实习面经(已过)无孔化就是手机的未来?还有很多问题需要解决【C#】实现学生成绩信息管理系统云原生应用如何做到低成本获得高稳定?用HTML+CSS做一个漂亮简单的个人网页