课程笔记Day08
- 递归方法
- 构造方法
- this和static
- package和import
第一章 递归方法
第01节 基础理论
什么是递归呢?
在 Java 当中,递归指的是 方法自己调用自己的过程。(备注:递归需要有出口,需要能够终结)
思想:大事化小小事化了。
生活实例: 《和尚讲故事》
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
。。。。。。。。
从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事。
生活实例: 《编程的故事》
我们在学习编程,搞钱,花钱,爽,空虚,寂寞,找对象,生娃。
让娃去学习编程,搞钱,花钱,爽,空虚,寂寞,找对象,生娃。
让娃去学习编程,搞钱,花钱,爽,空虚,寂寞,找对象,生娃。
。。。。。。。
让娃去学习编程,搞钱,花钱,爽,空虚,寂寞,找对象,生娃。
配图说明
第02节 快速入门
需求
采用递归的方式,计算5的阶乘。
阶乘: 5! = 5x4x3x2x1 = 120
分析
如果想要完成递归的操作,需要有三个步骤:
[1]写个方法 //递归是方法自己调用自己,说到递归,必须有方法
[2]找到规律 //罗列几项内容,通过罗列出来的数据,观察思考,找到规律
[3]找到出口 //什么时候,递归可以结束
===============================================
阶乘: 5! = 5x4x3x2x1 = 120
4! = 4x3x2x1
3! = 3x2x1
2! = 2x1
1! = 1
-------------
5! = 5x4!
4! = 4x3!
通项公式,如果是计算N的阶乘,应该怎么写呢?
N的阶乘 = N*(N-1)的阶乘;
=============================================
怎么找到出口呢?
什么时候结束啊?
当n=1的时候,就是结束,当n=1的时候,它的阶乘是几? 1
结束的时候,不要使用通项公式,其他情况,都是使用通项公式。
代码
//计算5的阶乘
public class Test03 {
public static void main(String[] args) {
//直接调用方法
int jieGuo = jieCheng(5);
System.out.println("jieGuo = " + jieGuo);
}
//写个方法
public static int jieCheng(int n){
//什么时候是出口?
if (n == 1){
return 1;
}else{
return n*jieCheng(n-1);
}
}
}
内存图
第03节 猴子分桃
题目
海滩上有一堆桃子和一只猴子。
猴子第一天,拿走了桃子的一半,又多拿一个。
猴子第二天,拿走了桃子的一半,又多拿一个。
猴子第三天,拿走了桃子的一半,又多拿一个。
猴子第四天,拿走了桃子的一半,又多拿一个。
猴子第五天,拿走了桃子的一半,又多拿一个。
。。。。。。
猴子第九天,拿走了桃子的一半,又多拿一个。
第十天的时候,最后剩余1个,请问原来第一天是多少个桃子?
代码
public class Test04 {
public static void main(String[] args) {
int tz = taozi(1);
System.out.println("tz = " + tz);
}
public static int taozi(int day){
if(day == 10){
return 1;
}else{
return (taozi(day+1)+1)*2;
}
}
}
//猴子第一天,拿走了桃子的一半,又多拿一个。
//假设第10天剩余1个。
//那么第9天 (1+1)x2 = 4
//那么第8天 (4+1)x2 = 10
//那么第7天 (10+1)x2 = 22
// ....
//出口是第10天是1个
第二章 构造方法
第01节 基础理论
什么是构造方法呢?
构造方法是用来创建对象的方法,每一个Java类,都具有构造方法。
系统默认赠送你一个无参数构造方法,用来创建对象使用。肉眼是看不到的,系统默认赠送的方法。
默认赠送的方法,模样:
public 类名称(){
}
如果我们手动的给出构造方法,系统将不再赠送构造方法。(系统赠送的构造是用来创建对象的)
构造方法有什么特点? 【同时满足】
1. 构造方法的名称必须和类名称完全相同。
2. 没有返回值类型,注意 void 也不要写。
构造方法有什么作用呢?
1. 可以创建对象(创建对象的过程就是调用构造的过程)
2. 可以给成员变量初始化数据。
第02节 快速入门
老师类
public class Teacher {
String name;
int age;
//这里存在构造方法
public Teacher(){
//帮我们进行初始化数据
name = "华浩";
age = 18;
}
//再写一个构造方法
public Teacher(String name,int age){
this.name = name;
this.age = age;
}
}
测试类
public class Test {
public static void main(String[] args<