<Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配...

简介: <Java SE> 5道递归计算,创建数组,数组遍历,JVM内存分配

一.递归


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();
    }
}


目录
相关文章
|
2天前
|
Java 索引
杨老师课堂_Java教程第四篇之数组运用
杨老师课堂_Java教程第四篇之数组运用
7 0
|
1天前
|
Java 编译器 API
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)
|
1天前
|
Java
杭电acm2018 母牛的故事 Java解法 经典递归
杭电acm2018 母牛的故事 Java解法 经典递归
5 0
|
1天前
|
Java
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
2022蓝桥杯大赛软件类省赛Java大学B组G题 数组切分
6 0
|
24天前
|
Java Linux
JVM堆内存诊断
JVM堆内存诊断
21 0
|
2天前
|
监控 算法 Java
Java虚拟机(JVM)使用多种垃圾回收算法来管理内存,以确保程序运行时不会因为内存不足而崩溃。
【6月更文挑战第20天】Java JVM运用多种GC算法,如标记-清除、复制、标记-压缩、分代收集、增量收集、并行收集和并发标记,以自动化内存管理,防止因内存耗尽导致的程序崩溃。这些算法各有优劣,适应不同的性能和资源需求。垃圾回收旨在避免手动内存管理,简化编程。当遇到内存泄漏,可以借助VisualVM、JConsole或MAT等工具监测内存、生成堆转储,分析引用链并定位泄漏源,从而解决问题。
12 4
|
5天前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
31 3
|
10天前
|
算法 安全 Java
JVM系列4-垃圾收集器与内存分配策略(二)
JVM系列4-垃圾收集器与内存分配策略(二)
18 0
JVM系列4-垃圾收集器与内存分配策略(二)
|
16天前
|
存储 Java
JVM内存结构(4)
JVM内存结构
15 1
|
10天前
|
存储 监控 算法
【JVM】如何定位、解决内存泄漏和溢出
【JVM】如何定位、解决内存泄漏和溢出
25 0