[C语⾔]函数的嵌套调⽤--链式访问--声明--定义--递归--练习--
函数(完)
⽂章⽬录
⼀,函数的嵌套调⽤
⼆,函数的链式访问
三,函数声明
四,函数的定义
五,递归
六,递归练习
前⾔
本节内容主要记录函数的剩余内容,前段内容可以参考上篇⽂章(为了⽅便起见,下⽅是上篇⽂章的链接)
本次记录的主要内容包括:
函数的嵌套调⽤--链式访问--声明--定义--递归。———————————————————————————————————————————
****正⽂开始****
⼀,函数的嵌套调⽤
函数是可以嵌套调⽤的,具体理解我们⽤下⾯这个代码理解:
void new_line() {
printf("hehe\n");
}
void three_line() {
int i = 0;
for (i = 1; i <= 3; i++) {
new_line();
}
}
int main() {
three_line();
return 0;
}
我们先看⼀下运⾏结果:
我们可以看到,打印了 3 个 hehe.
通过这张图,我们可以清晰地根据颜⾊箭头看到,在three_line函数内部嵌套了⼀个new_line函数所以函数是允许嵌套调⽤的
注:函数可以嵌套调⽤ 但是不能嵌套定义 :就是不能在⼀个函数⾥⾯再写⼀个函数
⼆,函数的链式访问
函数的链式访问就是把⼀个函数的返回值作为另外⼀个函数的参数。
我们也是通过⼀段代码对这个知识点进⾏理解:
int main() {
//int len = strlen("abc");
//printf("%d\n", len);
//                函数
printf("%d\n", strlen("abc"));
//      参数1      参数2
//链式访问:把⼀个函数的返回值作为另外⼀个函数的参数
return 0;
}
我们看⼀下演⽰结果:
在这段代码中,strlen函数是作为printf打印函数的第⼆个参数,它是把⾃⼰的返回值3返回给了printf函数,所以最终打印结果是:3为了加深理解,我们看⼀下这段代码,它的打印结果到底是什么?
int main() {
printf("%d", printf("%d", printf("%d", 43)));// 打印: 4321
c语言用递归函数求n的阶乘//          1            2          43
return 0;
}
我们看⼀下运⾏结果:
奇怪?他为什么会打印出4321呢?其实这⾥就是函数的链式访问,我们逐⼀分析就可做出回答。分析如下:
我们先在MSDN⾥⾯搜索了解⼀下printf函数
我们了解到:
printf函数的返回值是打印在屏幕上字符的个数
因此我们现在就可以清晰地理解这段代码的结果是:4321
三,函数声明
1. 告诉编译器有⼀个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
2. 函数的声明⼀般出现在函数的使⽤之前。要满⾜先声明后使⽤。
3. 函数的声明⼀般要放在头⽂件中。
具体体现在代码中是这样的:
如果我现在写⼀个Add函数(两数相加)
int Add(int x, int y) {
int z = 0;
z = x + y;
return z;
}
int main() {
int a = 10;
int b = 20;
int ret = Add(a, b);
printf("%d\n", ret);
return 0;
}
如果这时候我们把函数写到了主函数的下⾯,这时候编译器会抛出⼀个错误:
它会告诉我们说:Add未定义,这时候我们只要在主函数前声明Add函数即可已解决问题:具体解决放下如下:
只需在主函数前加上:
int Add(int x, int y);
完整代码和演⽰结果:
四,函数的定义
函数的定义是指函数的具体实现,交待函数的功能实现。
例如:上⼀个Add函数的定义
int Add(int x, int y) {
int z = 0;
z = x + y;
return z;
}
五,递归
(1)什么是递归?
递归:程序调⽤⾃⾝的编程技巧称为递归( recursion)。
递归做为⼀种算法在程序设计语⾔中⼴泛应⽤。 ⼀个过程或函数在其定义或说明中有直接或间接调⽤⾃⾝的⼀种⽅法,它通常把⼀个⼤型复杂的问题层层转化为⼀个与原问题相似的规模较⼩的问题来求解,递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,⼤⼤地减少了程序的代码量。
递归的主要思考⽅式在于:把⼤事化⼩
(2)递归的两个必要的条件是什么?
1>存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。
2>每次递归调⽤之后越来越接近这个限制条件。
为了加深对这两个必要条件的理解,我们以⼀个举例为例⼦:
题⽬:接受⼀个整数,按照顺序打印每⼀位
实现代码如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。