遞歸
遞歸算法即在程序中不斷反覆調用自身來達到求解問題的方法。此處的重點是調用自身,這就要求待求解的問題能夠分解爲相同問題的一個子問題。這樣,通過多次遞歸調用,便可求解完成。
遞歸調用是一個方法在其方法體內調用自身的方法調用方式。這種方法也稱爲“遞歸方法”。
編寫遞歸方法時,必須使用if語句強制方法在未執行遞歸調用前返回。如果不這樣做,在調用方法後,它將永遠不會返回。
好處:有的算法用遞歸表示要比循環表示簡潔精煉,而且某些問題,特別是與人工智能有關的問題,更適宜用遞歸方法。有的算法,用遞歸能實現,用循環不一定能實現。
缺點:大部分遞歸例程沒有明顯地減少代碼規模和節省內存空間, 遞歸形式比非遞歸形式運行速度要慢一些。這是因爲附加的方法調用增加了時間開銷,例如需要執行一系列的壓棧出棧等操作。但在許多情況下,速度的差別不太明顯。如果遞歸層次太深,還可能導致堆棧溢出。
實例
遞歸算法求階乘
public class P3_3 {
static long fact(int n){
if(n<=1){
return 1;
}else {
return n*fact(n-1);
}
}
public static void main(String[] args) {
System.out.println("輸入一個正整數!");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
long st = fact(n);
System.out.println("結果爲:"+st);
}
}
輸入一個正整數!
12
結果爲:479001600