函数模板及意义
函数意义
函数是用于定义代码功能块的,若是有一段代码改变相应参数后会在整个程序中重复使用,但是在使用时进行不断重复书写十分耗费时间,可以考虑定义函数,使用函数解决。
函数声明模板
函数返回值类型 函数名称(形式参数列表) ;
函数定义模板
函数返回值类型 函数名称(形式参数列表) {
功能代码
}
eg
int max(int a, int b) {//函数头
return a > b ? a : b;//功能代码【定义中除去花括号及其中间内容的部分之外的内容叫做函数头】
}
什么时候该声明函数,什么时候可以不用声明函数
这与函数调用和函数定义的相对位置有关。【函数的使用叫做调用】
若是函数调用在定义之前,则需要在调用前进行一次函数的声明,在函数声明的作用域内可以随意调用函数。【作用域在下面讲】
若是函数调用在函数定义之后,则不需要进行函数的声明,可直接调用
形式参数与实际参数
在函数声明或定义时的函数头中的括号内部的参数叫做形式参数,简称形参,是用于存储参数值的变量
在调用中括号中写入的参数叫实参,是用户期望向函数中传入的数据。
函数声明与定义区别
声明其实就是写出了定义的函数头【定义中除去花括号及其中间内容的部分之外的内容叫做函数头】
不过注意,在定义时,形参列表的形参必须写出形参名称,因为在功能定义中会使用到相应的参数。
但是在函数的声明时可以只用过写出参数类型,不用写出参数名称【写上也行】。因为声明只是相当于告诉编译器,你有这个函数,函数的返回值类型以及参数的个数及类型,编译器对于形参名称此时是不关注的。
若是声明时写形参名称,可与定义时写的不同,个数及类型对应上就可。
函数的调用
其实之前第一个程序写的printf就是一个在库中已经定义好了的函数,在调用它的时候,括号中的字符串,其实就是实参。
调用模板
函数名称(实参列表);
递归
所谓递归其实就是一个函数自己调用了自己。
原本是会进行无止尽的自我调用的,但是可以使用if判断以及return语句 对递归层数进行限制。
所以递归其实是有着模板的
函数返回值类型 函数名称(参数列表){
if(结束条件) return 返回数值;
功能模块
自身调用
功能模块
}
在刚刚开始学习递归过程中,应该将自己严格当做一个编译器,去一句一句执行功能。否则无法迅速领悟递归要点。