概念:
程序調用自身的編程技巧稱為遞歸(recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
1、遞歸測試
調用:fun(3);
public void fun(int n){
System.out.println(n);
if(n<0){
return;
}else{
fun(n-1);
System.out.println(n);
}
}
打印結果:3、2、1、0、-1、0、1、2、3
image.png
藍色箭頭:->遞歸前進
紅色箭頭:->遞歸返回
2、斐波納契數列
public int fibonacciSequence(int n){
if(n==1 || n==2){
return 1;
}else{
return fibonacciSequence(n-1)+fibonacciSequence(n-2);
}
}
3、漢諾塔算法
/**
* @param n 盤子的個數
* @param start 開始的柱子
* @param middle 中介柱子
* @param end 結果柱子
*/
public static void hanoi(int n,int start,int middle,int end){
if(n<=1){
System.out.println(start+"----->"+end);
}else{
hanoi(n-1,start,end,middle);
System.out.println(start+"----->"+end);
hanoi(n-1,middle,start,end);
}
}
image.png
image.png