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


目录
相关文章
|
1月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
17天前
|
安全 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法的深度融合
在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
13 1
|
1月前
|
存储 算法 前端开发
JVM架构与主要组件:了解Java程序的运行环境
JVM的架构设计非常精妙,它确保了Java程序的跨平台性和高效执行。通过了解JVM的各个组件,我们可以更好地理解Java程序的运行机制,这对于编写高效且稳定的Java应用程序至关重要。
35 3
|
1月前
|
Java 容器
07 Java数组与数组操作(定义+遍历+排序+增删改查)(上)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
33 8
|
1月前
|
存储 Java API
07 Java数组与数组操作(定义+遍历+排序+增删改查)(下)
07 Java数组与数组操作(定义+遍历+排序+增删改查)
28 4
|
19天前
|
C# 开发者 Windows
震撼发布:全面解析WPF中的打印功能——从基础设置到高级定制,带你一步步实现直接打印文档的完整流程,让你的WPF应用程序瞬间升级,掌握这一技能,轻松应对各种打印需求,彻底告别打印难题!
【8月更文挑战第31天】打印功能在许多WPF应用中不可或缺,尤其在需要生成纸质文档时。WPF提供了强大的打印支持,通过`PrintDialog`等类简化了打印集成。本文将详细介绍如何在WPF应用中实现直接打印文档的功能,并通过具体示例代码展示其实现过程。
79 0
|
19天前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
35 0
|
1月前
|
Java 编译器 测试技术
Java零基础教学(03):如何正确区别JDK、JRE和JVM??
【8月更文挑战第3天】Java零基础教学篇,手把手实践教学!
45 2
|
1月前
|
人工智能 Java 编译器
Java零基础(3) - 区别JDK、JRE和JVM
【8月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
47 1
|
24天前
|
缓存 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法
【8月更文挑战第27天】在Java的演进历程中,invokedynamic指令的引入和Lambda表达式的出现无疑是两大重要里程碑。它们不仅深刻改变了Java的开发模式和性能表现,还极大地推动了Java在函数式编程和动态语言支持方面的进步。本文将从技术角度浅析JVM中的invokedynamic指令及其与Java Lambda语法的紧密联系。
34 0