一.递归
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();
}
}
版权归原作者 .峰峰 所有, 如有侵权,请联系我们删除。