数组和递归

本文介绍了Java中的数组,包括数组的定义、初始化、内存分配以及二维数组的多种形式。此外,还探讨了递归的概念及注意事项,举例展示了递归的应用。
摘要由CSDN通过智能技术生成


一、数组概述和定义格式说明

数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型(后面讲解)。
C:数组定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
举例:
int[] a; 定义了一个int类型的数组a;
int a[]; 定义了一个int类型的a数组;
推荐使用第一种定义方式。

二、数组的初始化

什么是数组的初始化
  Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
初始化的分类:
 a:动态初始化: 只指定长度,由系统给出初始化值
 b:静态初始化: 给出初始化值,由系统决定长度
注意事项: 这两种方式,只能使用一种,不能进行动静结合
动态初始化的格式:
 数据类型[] 数组名 = new 数据类型[数组长度];
 数组长度其实就是数组中元素的个数。
举例:int[] arr = new int[3]; 定义了一个int类型的数组arr,这个数组可以存放3个int类型的值。
静态初始化的格式:
 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:int[] arr = new int[]{1,2,3};
简化格式:
 数据类型[] 数组名 = {元素1,元素2,…};
 举例:int[] arr = {1,2,3};

三、Java中的内存分配以及栈和堆的区

A:栈: 存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。
B:堆: 存放的是所有new出来的东西
特点:
 a: 每一个new出来的东西都会为其分配一个地址值。
 b: 每一个变量都有一个默认的值
 byte,short,int,long – 0
 float,double      – 0.0
 char         – ‘\u0000’
 boolean       – false
 引用数据类型     – null
c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收
C:方法区
D:本地方法区
E:寄存器

四、二维数组概述和格式

A:二维数组概述:
 二维数组就是每一个元素为一维数组的数组
B:二维数组格式1
 数据类型[ ][ ] 变量名 = new 数据类型[m][n];
 m表示这个二维数组有多少个一维数组 必须写上
 n表示每一个一维数组的元素个数 可选
C:注意事项
以下格式也可以表示二维数组
 a:数据类型 数组名[ ][ ] = new 数据类型[m][n];
 b:数据类型[ ] 数组名[ ] = new 数据类型[m][n];
 这两种格式不推荐使用
注意下面定义的区别

int x,y;
		int[] x,y[];	
		
		区别是:
		 int[] x,y[];//定义了两个数组 一个是一维数组x 一个是二维数组y
		  x=new int[3];	
  			  y=new int[3][];

A:二维数组格式2
  数据类型[][] 变量名 = new 数据类型[m][];
  m表示这个二维数组有多少个一维数组
  这一次没有直接给出一维数组的元素个数,可以动态的给出。
举例:
 int[][] arr = new int[3][];
 arr[0] = new int[2];
 arr[1] = new int[3];
 arr[2] = new int[1];
A:二维数组格式3
  数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}…};
 简化版:
  数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
  这个格式属于静态初始化:由我们指定具体的元素值,由系统给分配长度
 举例:
  int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
  int[][] arr = {{1,2,3},{5,6},{7}};

五、递归

A:递归概述: 方法定义中调用方法本身的现象
B:递归注意事项
 要有出口,否则就是死递归
 次数不能太多,否则就内存溢出
不死神兔问题
  有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …

public class MyTest1 {
     public static void main(String[] args) {
        int[] arr=new int [20];
        arr[0]=1;
        arr[1]=1;
        for (int i = 2; i < arr.length; i++) {
            arr[i]=arr[i-1]+arr[i-2];
        }
        System.out.println(arr[19]);
    }
}

5的阶乘问题

public class MyTest1 {
     public static void main(String[] args) {
        int result=jiecheng(5;
        System.out.println(result);
    }
    public  static int jiecheng(int num){
        if(num==){
           return 1;
        }else{
        return num*jiecheng(num-1);
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值