函数3小结
1.函数的声明和定义
2.函数的嵌套调用 和 链式访问
3.函数递归
3.1递归与迭代
1.函数的声明和定义
①编译器是顺序编译,如果将自定义函数放于主函数之后,需要先声明一下。声明主要是返回类型 函数名称 参数 例如:int add(int x, int y)
②一般声明放在头文件中,直接引用即可。例:#include "add.h"
定义:类似于该函数的说明书,说清楚函数的返回类型,返回结果,参数类型,等等。
2.函数的嵌套调用 和 链式访问
函数的嵌套调用:一个函数主体不能定义两个函数,但可以调用函数。一个函数里调用另一个函数。例:
void test(x)
{
printf("hhhh");
}
链式访问则是一个函数的参数是另一个函数的返回值;例:
printf("%d",printf("%d",printf("%d",43)));
这样的打印结果是4321;因为printf("%d",43)的返回值是打印数43的个数。即为2,2的返回结果是1。
3.递归
递归即自己引用自己;核心思想是将大事化小,事件间有类似的嵌套处理方式;
例如输入1234 打印1 2 3 4
一层层传参数值下去,直到最后递归结束。开始逐层返回执行符合条件的语句
递归需要注意的两个必备条件:
①需要有限制条件,且函数调用后会越来越接近限制条件,直到跳出条件;
②需要注意深度。由于栈区内存有限,防止栈溢出;每次调用函数都要分配一块空间,叫栈帧空间;当层次不断深入时,也会分配新的空间,这时就会出现栈溢出。


3.1递归与迭代
迭代其实也是用循环语句,不断有一个新值代替旧值;算第n个斐波那契数值时,用迭代明显优于递归;有时候递归需要重复计算多次,运算次数过多。
