目录
导读:
在前面,我们了解了第一部分的函数的定义、传参与调用(一),在这里我们基本了解了该怎样定义和使用一个函数。
现在我们来进一步的学习函数的嵌套和递归💯
1. 函数的嵌套调用
1.1 什么是嵌套调用
C语言的函数定义是互相平行、独立的,也就是说,在定义函数时,一个函数内不能在定义另一个函数,即不能嵌套定义,但可以嵌套调用函数。
1.2 基础实现
在调用函数时,需要注意以下几点:
- 函数名必须与函数定义的名称一致,包括大小写。
- 调用函数时,必须传递该函数所需要的参数,参数的顺序和类型必须与函数定义时一致。
- 如果函数没有参数,则在调用函数时应该留空参数列表
例如:
void B()
{
printf("Hello, World!\n");
}
void A()
{
B();
}
int main()
{
A();
return 0;
}
1.3 调用流程解析
2. 函数的链式访问
2.1 什么是链式访问
在C语言中,可以使用函数的链式访问来简化对多个函数的调用过程。
2.2 基础实现
int add(int a, int b)
{
return a + b;
}
int multiply(int a, int b)
{
return a * b;
}
int main()
{
int x = 1;
int y = 2;
int z = 0;
z = multiply(add(x, y), y);
printf("(%d + %d) * %d = %d\n", x, y, y, z);
return 0;
}
解析:
3. 函数递归
3.1 什么是递归
程序调用自身的编程技巧称为递归( recursion)
3.2 递归的两个必要条件
- 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
- 每次递归调用之后越来越接近这个限制条件。
3.3 用递归方法求n!
int factorial(int n)
{
if (n == 0 || n == 1)
{
return 1; // n为0或1时,阶乘为1
}
else
{
return n * factorial(n - 1); // 递归调用自身,计算n-1的阶乘
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int res = factorial(n); // 计算n的阶乘
printf("%d! = %d\n", n, res);
return 0;
}
解析:
4. 小结练习
函数的调用部分到这里基本就结束了,在闲暇实践感兴趣的小伙伴们可以做一下下面的小练习