递归与数组


递归

递归头:什么时候不调用自身。如果没有头,将陷入死循环。

递归尾:什么时候需要调用自身方法

package com.method;

public class Domn06 {
  //阶乘 2!
  public static void main(String[] args) {
      System.out.println(f(10));
  }

  //递归 2!=2*f(1) 类似于函数
  public static int f(int n){
      if (n==1){
          return 1;
      }else {
          return n*f(n-1);
      }
  }
}

数组的四个基本特点

  1. 其长度是确定的,数组一旦被创造,它的大小就是固定的

  2. 其元素必须是相同类型,不允许出现混合类型

  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型

  4. 数组变量属于引用变量,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,java中对象是在堆中的,一次数组无论保存原始类型还是其他对象类型

数组的边界

  1. 下标的合法区间【0,length-1】

小结:

  1. 数组是对象

  2. 数组长度是确定的,不可变得

冒泡排序

package com.array;

import java.util.Arrays;

public class ArrayDomn07 {
  public static void main(String[] args) {
      int[] a={1,5,64,65,464,6464,6464,6464,6464};

      int[] sort=sort(a);

      System.out.println(Arrays.toString(sort));

  }


  //冒泡排序
  //1.比较数组中,两个相邻的元素,如果第一个数比第二个大,我们就交换他们的位置
  //2.每一次比较,都会产生出一个最大,或者最小的数字
  //3.下一轮则可以少一次排序
  //4.一次循环,知道结束
  public static int[] sort(int[] array) {
      int temp=0;//临时变量

      boolean flag=false;//通过flag标识位减少没有意义的比较

      //外层循环,比较判断两个数,如果第一个数比第二个数大,则交换位置
      for (int i = 0; i <array.length ; i++) {
          //内层循环,比
          for (int j = 0; j <array.length-1-i ; j++) {
              if (array[j+1]<array[j]){
                  temp=array[j];
                  array[j]=array[j+1];
                  array[j+1]=temp;
                  flag=true;
              }
          }
          if (flag==false){
              break;
          }

      }
      return array;
  }



}

稀疏数组

package com.array;

public class ArrayDomn08 {
  public static void main(String[] args) {
      int[][] array1=new int[11][11];
      array1[1][2]=1;
      array1[2][3]=1;

      System.out.println("输出原始数组");

      for (int[] ints : array1){
          for (int anInt : ints){
              System.out.print(anInt+"\t");
          }
          System.out.println();
      }


      int sum=0;
      for (int i = 0; i <11 ; i++) {
          for (int j = 0; j <11 ; j++) {
              if (array1[i][j]!=0){
                  sum++;
              }

          }

      }
      System.out.println("有效值的个数: "+sum);


      //
      int[][] array2=new int[sum+1][3];

      array2[0][0] =11;
      array2[0][1] =11;
      array2[0][2] =sum;

      int count=0;
      for (int i = 0; i <array1.length ; i++) {
          for (int j = 0; j <array1[i].length ; j++) {
              if (array1[i][j]!=0){
                  count++;
                  array2[count][0]=i;
                  array2[count][1]=j;
                  array2[count][2]=array1[i][j];
              }

          }

      }
      System.out.println("稀疏数组");

      for (int i = 0; i <array2.length ; i++) {
          System.out.println(array2[i][0]+"\t"
                              +array2[i][1]+"\t"
                              +array2[i][2]+"\t");

      }
      System.out.println("=======================");
      System.out.println("还原");


      int[][] array3= new int[array2[0][0]][array2[0][1]];


      for (int i = 1; i <array2.length ; i++) {
          array3[array2[i][0]][array2[i][1]] = array2[i][2];


      }
      System.out.println("输出还原数组");

      for (int[] ints : array3){
          for (int anInt : ints){
              System.out.print(anInt+"\t");
          }
          System.out.println();
      }

  }
}

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM