函数概述
我们在编写程序中会遇到很多重复的代码,而为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数。
返回值类型: 运行这段程序得出的一个运算结果,结果类型,如果函数没有返回值则用void来表示该函数没有返回值。
函数名:仅仅是一个标识符,可以随意起名字。
形式参数:是一个变量,用于存储调用函数传递进来的实际参数。
实际参数:传递给形式参数的具体数值。
返回值: 返回给调用者。
函数的特点
1.定义函数可以将功能代码进行封装
2.便于对该功能进行复用
3.函数只有被调用才会被执行
4.函数的出现提高了代码的复用性
5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数中只能调用函数,不可以在函数内部定义函数。
定义函数时,函数的结果应该返回给调用者,交由调用者处理。
函数的运行原理
每当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中的参数和变
量。活动记录置于一个内存去榆中,称为调用堆栈(
call stack
)。调用堆栈也称为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为“
堆栈
”
。当一个方法调用另一个方法时,调用者的活动记录保持不动,一个新的活动记录被创建用于被调用的新方法。一个方法结束返回到调用者时,其相应的活动记录也被释放。
一.函数重载
1.重载的引入
两个数相加,需要一个函数名字
getSum
,三个数相加需要一个函数名字
getSum2
,那如果有
100
个
数相加,不是就需要
getSum100
了?那是不是在调用函数的时候还需要去记住哪个函数名对应多少个参数?这很显然是不可能的了。java
为我们提供了重载这个功能,使用重载就可以解决这个问题。
2.重载的概念
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可,这时
就形成了重载。重载和返回值类型无关。
void
show
(
int
a
,
float
b
,
char
c
) {
}
与权限没关系,与返回值类型没关系,与参数名没关系,只有和参数类型的排列组合有关系
(
注意一下参数类型的向下兼容问题)。
重载的好处就在于我们可以扩展函数的功能(函数重名,但是参数类型不一样,执行内容也可以不
一样)
二.函数的递归
递归的体现就是函数自身调用函数自身。
一般而言,但凡能够被迭代(循环)解决的问题,递归都可以;递归解决的问题,迭代就不一定
了。
递归其实是分治法的一种实现方式(一种实现思路)。
分治法是一种算法思想,分治法主要解决的问题是将大问题,进行拆分,拆分成若干个小的问题进
行求解,最终将每个小问题的解进行合并。其实,分治法就是一种暴力破解法(穷举),也是一种搜索 最优答案的算法。
递归实现累加
![](https://i-blog.csdnimg.cn/blog_migrate/c152cf22061e9cfb3f107fdf4cb05744.png)
函数的使用注意事项:
1. 函数中只能调用函数,不能定义函数,没有定义函数之前,不能调用函数。
2. 输出语句只能对有具体返回结果的函数的进行打印。
3. 返回值类型是void的函数,是不可以被输出语句打印的。
4. 函数需要实现功能,那么函数只实现所需功能即可,不要实现不需要的功能。