一.递归
1.递归计算N!
public class TestDemo { public static int fuc(int n){ if(n==1){ return 1; }else{ int tmp = n*fuc(n-1); return tmp; } } public static void main(String[] args) { int ret = fuc(5); System.out.println(ret); } }
结束条件其实是归的其实条件(什么时候开始归)
2.按顺序打印一个数字的每个数
public class TestDemo { public static void fuc(int n){ if(n<10){ System.out.print(n+" "); }else{ fuc(n/10); System.out.print(n%10+" "); } } public static void main(String[] args) { fuc(1234); } }
3.递归求1+2+3+...+10
public class TestDemo { public static int fuc(int n){ if(n==1){ return 1; }else{ int tmp = n+fuc(n-1); return tmp; } } public static void main(String[] args) { int ret = fuc(10); System.out.println(ret); } }
4.递归返回一个数的每位的和
public class TestDemo { public static int fuc(int n){ if(n<10){ return n; }else{ int tmp = n%10+fuc(n/10); return tmp; } } public static void main(String[] args) { int ret = fuc(12345); System.out.println(ret); } }
5.递归求斐波那契数列
public class TestDemo { public static int fuc(int n){ if(n==1||n==2){ return 1; }else{ int tmp = fuc(n-1)+fuc(n-2); return tmp; } } public static void main(String[] args) { int ret = fuc(51); System.out.println(ret); } }
6.迭代版本的斐波那契
public class TestDemo { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int f1=1; int f2=1; int f3=1; for (int i = 0; i <n-2 ; i++) { f3=f1+f2; f1=f2; f2=f3; } System.out.println(f3); } }
二.数组
1.定义数组的三种方式
int[] array = {1,2,3,4,5}; int[] array2= new int[]{1,2,3,4,5}; int[] array3= new int [5];
array是一个引用变量,创建在栈上,存放的是堆上的一个地址
如果没有初始化,默认值是0
boolean类型的默认值是false
2.遍历数组的三种方法
1.下标遍历
public class TestDemo { public static void main(String[] args) { int[] array = {1,2,3,4,5}; for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } System.out.println(); } }
2.for each 遍历(加强for循环)
public class TestDemo { public static void main(String[] args) { int[] array = {1,2,3,4,5}; for (int x:array){ System.out.print(x+" "); } } }
3.Array.toString遍历(需要导包,输出自动补中括号)
public class TestDemo { public static void main(String[] args) { int[] array = {1,2,3,4,5}; String ret = Arrays.toString(array); System.out.println(ret); } }
三种输出结果
3.数组是引用类型
1.引用指向(引用)一个对象的内存分布
4.array1=array2
其意思就是把array2的值赋给array1,因为array2的值是其指向的地址,所以array1现在的值变成了array2所指向的地址,则array1与array2共同指向这一块地址。
当没有人引用array1这个对象时,其就会被JVM的垃圾回收器回收了。
5.思考题
下面这段代码会输出什么??
public class TestDemo { public static void fuc1(int[]array){ array = new int[]{1,2,3}; } public static void fuc2(int[]array){ array[0]=99; } public static void main(String[] args) { int[] array={5,6,7}; fuc1(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } System.out.println(); fuc2(array); for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); } System.out.println(); } }