Day 3 函数&递归
函数的定义
概念:实现特定功能的一段代码,可反复使用。
public static void 函数名称(){
//函数主题
}
函数的参数
调用函数时,所传入的数据被称为“参数”。
形参与实参
定义语法:
public static void 函数名称(形式参数){ //形参等价于局部变量的声明
//函数主体
}
调用语法:
函数名称(实际参数); //实参等价于局部变量的赋值
单个参数
调用带参函数时,必须传入实际参数,为形参赋值。
多个参数
调用带有多个参数的函数时,依次传入实参,类型、个数、顺序,必须与形参对应
返回值与返回值类型
定义语法
puiblic static 返回值类型 函数名称(){ //返回值类型规定返回值的具体类型(基本、引用、void)
//函数主体
return value; //返回值(根据需求返回一个结果(值))
}
调用语法
变量 = 函数名称(); //变量类型与返回值类型一致
注:一个函数只能有一个返回值。
当有返回值的函数存在分支结构时,必须保证每一条分支都具有正确的返回值
return的两种用法
1、应用在有返回值的函数中:
return value; //表示结束当前函数,并伴有返回值,返回到函数调用处
2、应用在没有返回值(void)的函数中:
public static void show(){
for(int i = 1;i <= 100;i++){
if(i == 50){
return; //表示结束当前函数,直接返回函数调用处
}
}
}
总结
注意点:一个类中可以定义多个函数,函数之间属于并列关系,不可嵌套。
经验:一个函数只做一件事。(单一职能原则)
优点:
减少代码冗余
提高复用性
提高可读性
提高可维护性
方便分工合作
函数执行机制
多级调用
无穷递归
当函数自己调用自己时,如果没有正确的出口条件,则产生无穷递归,导致内存溢出。
递归
在实际开发中,递归可以解决具有既定规律的特定问题。
何时使用递归
当需要解决的问题可以拆分为若干小问题,大小问题的解决方法相同。
有固定规律,函数中自己调用自己。
如何正确使用递归
设置有效的出口条件,避免无穷递归。
递归经典实例
斐波那契数列
public class test01{
public static void main(String[] args) {
int i = 0,j = 1;
System.out.println(j);
fb(i,j);
}
public static int fb(int i,int j){
int k = j;
j = i + j;
i = k;
System.out.println(j);
if(j > 1000){
return 0;
}
return fb(i,j);
}
}