递归:本身调用本身,要有一个出口(效率慢,很少使用)
F1=1,F2=1 Fn=Fn-1 +Fn-2(n>2)
public static int f(int n){
if(n==1||n==2){
return 1;
}else{
return f(n-1)+f(n-2);
}
}
数组
(类似容器,引用类型,不可变大小)
定义并初始化数组:int[] a=new int[n] //n表示数组可以存储多少个数据
数组一旦声明成一种类型,就不能装其它类型
注:声明时不可指定长度 int[n]a,这样 是错误的
动态初始化(定义,分配空间,赋值分开进行)
不赋值boolean默认false,引用类型默认null,char默认‘\u0000’,float为0.0f,double为0.0D,long为0l,byte short int为0):
Date[] days; days=new Date [3]; days[i]=new Date();
静态初始化(定义,分配空间,赋值同时进行)
数据类型[]变量名={值1,值2,....} 或者 数据类型[]变量名=new 数据类型[]{值1,值2,....}
Date[2] days={new Date(),new Date()}; //数组装对象时,装的是它的引用
匿名数组 new int[]{1,2,3,4} 可以在不创建变量的情况下重新初始化一个数组
a=new int[]{1,2,3,4} 注:里面不能写数组长度
注:1.数组内保存的数据类型必须一直,同时与声明时的类型相同
2.数组的数据类型是 数据类型[ ]
数组长度:数组.length 此时length是一个属性
查找:(1)顺序查找(数组内顺序没排好)
思路:按照数组角标一个一个找,如果找到了返回索引
(2)二分法查找(顺序必须是排好的):如果start<=end就进行循环
数组的工具类:(Arrays)
(1)数组的拷贝int [] b=a; //此时a,b两个变量指向同一个数组,两者会相互影响
若想指向不同数组 int[] copya=Arrays.copyOf(想拷贝的数组,长度)
这个方法也可以用来增加原有数组的长度 a=Arrays.copyOf(a,a.length*2)
(2)数组排序
Arrays.sort(type[] a) 实现快速排序(如果想要对象数组实现快速排序,对象必须实现comparable接口,重写compareTo方法,用Double的compare()方法比较基本类型数组自动实现了接口)
(3)输出数组: Arrays.toString(arr) //整个输出数组,以字符串形式输出
(4)二分法查找 Arrays.binarySearch(int[]arr,int num)
(5)填充元素 Arrays.fill( a1, value ); //填充a1数组中的每个元素都是value,常用布尔型数组填充。
double max(double...d)表示可变数量集合,参数的数量可变,把这些数量不固定的参数放到数组d中,可以通过数组的访问方式访问它。
double f(String s,double d)可变参数必须放到后边,如果放在前面的话,传参的时候虚拟机不确定后边的参数应该传给可变参数还是第二个参数
例子: double f(1,2,3,"abc")虚拟机不确定“abc”是应该传给到可变参数中,还是传给第二个参数
一个方法只能有一个可变参数,原理同上
二维数组(先明确长度再赋值,从高纬度到低纬度生命,从做到右)
int a[] []=new int[i][]; //a.length 一纬长 a[i].length 二维长
a[i]=new int[j]; //i个一纬,每个一纬中有j个二维,i表行,j表列