java算法的递归问题设计_java算法-递归算法思想
遞歸算法是跟常見的算法思想。使用遞歸算法,往往可以簡化代碼編寫,提高程序的可讀性。但是,不適合的遞歸往往導致程序的執行效率變低。
一、遞歸算法基本思想
遞歸算法即在程序中不斷反復調用自身來叨叨求解問題的方法。此處的重點是調用自身,這就要求待求解的問題能夠分解為相同問題的一個子問題。這樣,通過多次遞歸調用,便可以完成求解。
在遞歸方法中,主調方法又是被調方法。執行遞歸方法將反復調用其自身。每調用一次就進入新的一層。方法的遞歸調用分為兩種情況分別為:
直接遞歸:即在方法中調用方法本身.
間接遞歸:即間接的調用一個方法,如func_a調用func_b,func_b又調用func_a間接遞歸用得不多.
編寫遞歸方法時,必須使用if語句強制方法在未執行遞歸調用前返回。如果不這樣做,在調用方法后,他將永遠不會返回。這是一個很容易犯的錯誤。
二、遞歸優缺點
1、優點
在方法中使用遞歸的好處有:程序代碼更簡潔清晰,可讀性更好。有的算法用遞歸表示要比用循環表示簡潔精煉,而且某些問題,特別是與人工智能有關的問題,更適宜用遞歸方法,如八皇后問題、漢諾塔問題等。有的算法,用遞歸能實現,而且循環不一定能實現。
2、缺點
大部分遞歸例程沒有明顯的減少代碼規模和節省內存空間。遞歸形式比非遞歸形式運行速度要慢一些。這是因為附加的方法調用增加了時間開銷,例如需要執行一系列的壓棧出棧等操作。但在許多情況下,速度的差別不太明顯。如果遞歸層次太深,還可能導致堆棧溢出。
三、遞歸算法實例
遞歸算法常用于一些數據計算,或者有明顯的遞推性質問題。理解遞歸最常用的一個例子是編寫程序求階乘問題。
階乘就是一個正整數的階乘是所有小于及等于該數的正整數的積,并且0的階乘為1。
五的階乘就是:5*4*3*2*1
十的階乘就是:10*9*8*7*6*5*4*3*2*1
public class algorithm {
/**
* 遞歸算法階乘
*/
public static int fact(int i){
if (i<=1){
return 1;
}else {
return i*fact(i-1);
}
}
public static void main(String[] args) {
/**
* 遞歸算法階乘
*/
System.out.println(fact(12));
}
}
效果如下:
479001600
總結
以上是生活随笔為你收集整理的java算法的递归问题设计_java算法-递归算法思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把一个dataset的表放在另一个dat
- 下一篇: json最大长度限制_api接口返回动态