2.1递归函数
递归:Recursion
概念:一个方法自己调用自己
递归算法:
A.方法自己调用自己
B.要有出口,逐渐向出口靠近。
使用中可能出现的问题:Exception in thread "main" java.lang.StackOverflowError,栈空间溢出异常。
//递归函数
public class TestRecursion{
public static int getsum(int n){
System.out.println("*");
if (n == 1){
return 1;
}else{
return getsum(n - 1) + n;
}
}
public static void main(String args[]){
int res = getsum(5);
System.out.println(res);//15
}
}
2.2 数组:
2.2.1 为什么要使用数组:
如果说程序中,需要存储大量的相同类型的一组数据,如果直接使用变量来进行存储,每个变量只能存储一个值,就需要大量的变量。
1、代码过于臃肿
2、程序的可读性差
3、数据维护较差
2.2.2数组的概念:
就是一组相同数据类型的数据。内存上是开辟的连续的内存空间。
2.2.3 数组的特点:
1、定长。容量固定。数组一旦创建后,那么长度不能更改。(容量,长度,都是指存储的数量)
2、存储的数据类型必须都一致。
3、在内存中空间连续挨个。
4、数组是引用类型的数据,存在栈和堆的地址引用关系
java中两大数据类型:
A.4类8种基本数据类型
B.引用数据类型:数组 , 对象 , 集合......
2.2.4 数组的使用:
step1: 创建数组
step2: 使用数组:存储数组、访问数组
2.3.5 数组的语法:
创建数组的语法:
数据类型[] 数组名 = new 数据类型[长度、容量、个数];
int[] arr = new int[5];//声明int数组类型变量,定义变量名为a,分配长度为5的连续空间
数据类型 数组名[] = new 数据类型[长度];//也可以
使用数组的语法:
数组名[index],操作数组
arr[3] = 123//存储数据
System.out.println(arr[3]);//读取数据
index:因为一个数组存储了多个数据(也叫元素),每个元素都有一个下标,也叫索引,index。理解起来就是给每个数据排个编号,固定从0开始,0,1,2,3,4.。。。到长度减1。
注意点:
数组的下标不能超出这个范围。否则就会下标越界:java.lang.ArrayIndexOutOfBoundsException
2.2.6内存分析(拓展)
内存存储数据:
A. 栈:存放基本数据类型的变量,以及引用变量的引用,函数中变量所占用的空间,执行完就会销毁。
B. 堆:存放的是new出来的内容,执行后,堆里存储的内容(对象等),会被标记为垃圾,但是不会立即销毁,而是等系统回收机制GC回收。GC(Grabage Collection)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mKgNnrY8-1585232650666)(C:\Users\徐嘟嘟\AppData\Roaming\Typora\typora-user-images\image-20200326193533009.png)]
2.2.7 使用循环遍历数组
1、遍历:依次访问数组中每个元素。可以赋值,可以取值。
2、因为操作数组,就是数组名字配合下标,而下标固定都是从0开始,到长度减1。
for(int i = 0;i < arr2.length;i++){
System.out.println(arr2[i]);
}
2.2.8 数组的长度
获取数组的长度:length,数组的一个属性。
数组名.length--->获取这个数组的长度
;i < arr2.length;i++){
System.out.println(arr2[i]);
}
## 2.2.8 数组的长度
```java
获取数组的长度:length,数组的一个属性。
数组名.length--->获取这个数组的长度