遞歸與數組


遞歸

遞歸頭:什么時候不調用自身。如果沒有頭,將陷入死循環。

遞歸尾:什么時候需要調用自身方法

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