一、方法递归调用(非常非常重要,比较难)
1.1 基本介绍
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁.
1.2 递归能解决什么问题?
1.3 递归举例
- 打印问题
- 阶乘问题
1.3.1 打印问题
public class Recursion01 {
public static void main(String[] args) {
//打印问题
T t1 = new T();
t1.test(4);//输出什么? n=2 n=3 n=4
}
}
class T {
//分析
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
}
1.3.2 阶乘问题
public class Recursion01 {
public static void main(String[] args) {
//阶乘问题
int res = t1.factorial(5);
System.out.println("5 的阶乘 res =" + res);
}
}
class T {
//factorial 阶乘
public int factorial(int n) {
if (n == 1) {
return 1;//找出口
} else {
return factorial(n - 1) * n;
}
}
}
1.4 递归重要规则
在使用递归之前,先找出口,然后再想步骤。
1.5 案例演示
斐波那契数列递归
public class RecursionExercise01 {
public static void main(String[] args) {
T t1 = new T();
int n = 7;
int res = t1.fibonacci(n);
if(res != -1) {
System.out.println("当 n="+ n +" 对应的斐波那契数=" + res);
}
}
}
class T {
/*
请使用递归的方式求出斐波那契数 1,1,2,3,5,8,13...
给你一个整数 n,求出它的值是多
思路分析
1. 当n=1 斐波那契数是1
2. 当n=2 斐波那契数是1
3. 当 n >= 3 斐波那契数 是前两个数的和
4. 这里就是一个递归的思路
*/
public int fibonacci(int n) {
if( n >= 1) {
if( n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n-1) + fibonacci(n-2);
}
} else {
System.out.println("要求输入的 n>=1 的整数");
return -1;
}
}
}
二、方法重载(OverLoad)
2.1 基本介绍
Java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!
2.2 重载的好处
- 减轻了起名的麻烦
- 减轻了记名的麻烦
2.3 快速入门案例
案例:类:MyCalculator 方法:calculate
- calculate(int n1, int n2) //两个整数的和
- calculate(int n1, double n2) //一个整数,一个 double 的和
- calculate(double n2, int n1)//一个 double ,一个 Int 和
- calculate(int n1, int n2, int n3)//三个 int 的和
2.4 注意事项和使用细节
三、可变参数
3.1 基本概念
可变参数:
适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意:
可变参数必须位于最后一项。
3.2 基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名) {
}
3.3快速入门案例
//1. int... 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多) //2. 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
//3. 遍历 nums 求和即可
public int sum(int... nums) {
System.out.println("接收的参数个数=" + nums.length);
int res = 0;
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
}
3.4 注意事项和使用细节
四、作用域
4.1 基本使用
class Cat {
//全局变量:也就是属性,作用域为整个类体 Cat 类:cry eat 等方法使用属性
//属性在定义时,可以直接赋值
int age = 10; //指定的值是 10
//全局变量(属性)可以不赋值,直接使用,因为有默认值,
double weight; //默认值是 0.0
public void hi() {
//局部变量必须赋值后,才能使用,因为没有默认值
int num = 1;
String address = "北京的猫";
System.out.println("num=" + num);
System.out.println("address=" + address);
System.out.println("weight=" + weight);//属性
}
public void cry() {
//1. 局部变量一般是指在成员方法中定义的变量
//2. n 和 name 就是局部变量
//3. n 和 name 的作用域在 cry 方法中
int n = 10;
String name = "jack";
System.out.println("在 cry 中使用属性 age=" + age);
}
}
4.2 注意事项和细节使用
本博客引用韩顺平老师Java课程