1. 程式人生 > 其它 >Java遞迴與基礎複習

Java遞迴與基礎複習

Day01—基礎複習,遞迴

1、遞迴

  • 定義:指在當前方法內呼叫自己,即函式內部呼叫本函式

  • 分類:

    • 直接遞迴和間接遞迴
    • 直接遞迴成為方法自身呼叫自己
    • 間接遞迴可以A方法呼叫B方法,B方法呼叫C方法,C方法呼叫A方法
  • 注意事項
    • 遞迴一定要有條件限定,保證遞迴能夠停止下來,否則會發生棧記憶體溢位
    • 在遞迴中雖然有條件限定,但遞迴次數不能太多,否則也會發生棧記憶體溢位。
    • 構造方法,禁止遞迴。
  • 遞迴使用的前提

    • 當呼叫方法的時候,方法的主體不變,每次呼叫方法的引數不同,可以使用遞迴
  • 遞迴練習

  • 1、計算1到n的和

    package com.one;
    
    public class Sum_n {
    	
    	public static void main(String[] args) {
    		// 使用遞迴計算1到100的和
    		int s= sum(100);
    		System.out.println(s);	
    	}
    	/*
    	 * 思路分析:
    	 * 計算1-N的和
    	 * 可以做 n+(n-1)+(n-2)+...+1
    	 * 注:使用遞迴必須明確:
    	 * 		1、遞迴的結束條件
    	 * 			本題獲取到1結束
    	 * 		2、遞迴的目的
    	 * 			獲取下一個被加的數字
    	 * */
    	public static int sum(int n){
    		//獲取到1結果
    		if(n==1){
    			return 1;
    		}
    		//獲取下一個被加的數字(n-1)
    		return n+sum(n-1);
    	}
    }
    
  • 使用遞迴求階乘

package com.one;
public class Jiecheng {
	public static void main(String[] args) {
		//遞迴n*(n-1)*(n-2)*..*1
		int jiecheng=jc(5);
		System.out.print(jiecheng);
	}
	//方法的主體不變,引數發生變化
	public static int jc(int n){
		//獲取到1結果
		if(n==1){
			return 1;
		}
		//獲取下一個被加的數字(n-1)
		return n*jc(n-1);
	}
}
  • 使用遞迴遍歷檔案目錄
package com.one;

import java.io.File;
public class Dfile {
	/*要求列印多級目錄*/
	public static void main(String[] args){
		File file=new File("E:\\note");
		getAllFile(file);
		
	}
	public static void getAllFile(File dir){
		System.out.println(dir);
		File[] files=dir.listFiles();
		for (File f:files){
			if(f.isDirectory()){
				//判斷是否是資料夾,如果是資料夾,則執行本身繼續遞迴遍歷
				getAllFile(f);
			}else{
				//不是資料夾,則直接列印
				System.out.println(f);
			}
		}
	}
}
/*Console結果
 * E:\note
E:\note\Ajax.md
E:\note\api1.md
E:\note\API2.md
 * */
  • 搜尋限定檔案型別
package com.one;

import java.io.File;
public class Dfile {
	/*1、要求列印多級目錄
	 * 2、要求只打印.md檔案*/
	public static void main(String[] args){
		File file=new File("E:\\note");
		getAllFile(file);
		
	}
	public static void getAllFile(File dir){
		File[] files=dir.listFiles();
		for (File f:files){
			if(f.isDirectory()){
				//判斷是否是資料夾,如果是資料夾,則執行本身繼續遞迴遍歷
				getAllFile(f);
			}else{
				//不是資料夾,則直接列印
				//使用File物件的toSting方法,在使用字串的endWith("字串")判斷結尾字元,返回布林值的方法;
				String s= f.toString();
                //把字串全部轉換為小寫的
				s=s.toLowerCase();
				boolean bool=s.endsWith(".md");
				if(bool){
					System.out.println(f);
				}
				//簡潔寫法
                //鏈式程式設計
				if(f.getName().toString().endsWith(".md")){
					System.out.println(f);
				}
			}
		}
	}
}
/*Console結果
E:\note\Ajax.md
E:\note\api1.md
E:\note\API2.md
 * */

2、基礎知識複習

2.1 命令
//檢視版本
javac -version
java -version
// 編譯與執行
javac Xxxx.java
生成Xxxx.class
執行命令
java Xxxx
2.2常量

定義:在程式執行中,空間不能發生改變,變數不能被第二次賦值的空間叫做常量;只有一次賦值機會。

規範:所有字母大寫

關鍵字:final

package com.two;

public class demo1 {
	public static void main(String[] args) {
		//聲名常量
        final double PI =3.1415926;
		System.out.print(PI);
	}
}
2.3資料型別
  • 參考連線:https://www.runoob.com/java/java-basic-datatypes.html

此處不在一一複習只做簡單介紹:

計算機儲存單位

1位=8位元組

1bit=8byte

分類:

整型 int,long型別
浮點型 double float(注:float聲名的數字需要在數字後新增f)
布林型 boolean bool;
字元型 char a='k';佔兩個位元組;只能使用單引號聲名;
short 預設值 0
2.4資料型別轉換
布林型(boolean)不參與型別轉換
  • 自動

    可以自然而然發生,不需要人為干預。一般發生在從小轉向大。將小資料賦值給大型別的變數。從小型別轉成大型別。資料是不會發生丟失

    賦值:小的資料 給到大的型別的變數; 小的型別的資料給到大的型別的變數

    運算:運算過程中,選取大型別(將所有運算數的型別自動轉為同一種類型,然後運算)

    必須滿足轉換前的資料型別的位數要低於轉換後的資料型別,例如: short資料型別的位數為16位,就可以自動轉換位數為32的int型別,同樣float資料型別的位數為32,可以自動轉換為64位的double型別。
    
    package com.two;
    
    public class demo1 {
    
    	public static void main(String[] args) {
    		char c1='a';//定義一個char型別
            int i1 = c1;//char自動型別轉換為int
            System.out.println("char自動型別轉換為int後的值等於"+i1);
            char c2 = 'A';//定義一個char型別
            int i2 = c2+1;//char 型別和 int 型別計算
            System.out.println("char型別和int計算後的值等於"+i2);
    	}
    }
    /*c1 的值為字元 a ,查 ASCII 碼錶可知對應的 int 型別值為 97, A 對應值為 65,所以 i2=65+1=66。*/
    
  • 強制型別轉換

    • 條件是轉換的資料型別必須是相容的。
    • 格式:(type)value type是要強制型別轉換後的資料型別 例項:
    package com.two;
    public class Demo2 {
    	public static void main(String[] args) {
    		// 強制型別轉換
    		int i1 = 123;
            byte b = (byte)i1;//強制型別轉換為byte
            System.out.println("int強制型別轉換為byte後的值等於"+b);
            double d= (double)i1;
            System.out.println("int強制型別轉換為double後的值等於"+d);
    	}
    }
    /*int強制型別轉換為byte後的值等於123*/
    
  • 隱含強制型別轉換

    • 整數的預設型別是 int。
    • 小數預設是 double 型別浮點型,在定義 float 型別時必須在數字後面跟上 F 或者 f。

不辜負自己,加油;