遞歸算法是一種直接或者間接調用自身函數或者方法的算法。Java遞歸算法是基于Java語言實現的遞歸算法。遞歸算法的實質是把問題分解成規模縮小的同類問題的子問題,然后遞歸調用方法來表示問題的解。遞歸算法對解決一大類問題很有效,它可以使算法簡潔和易于理解。
遞歸算法解決問題的特點:
1)遞歸就是方法里調用自身。
2) 在使用遞增歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
3)遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設計程序。
4)在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸算法設計程序。
遞歸算法所體現的“重復”一般有三個要求:
一是每次調用在規模上都有所縮小(通常是減半);
二是相鄰兩次重復之間有緊密的聯系,前一次要為后一次做準備(通常前一次的輸出就作為后一次的輸入);
三是在問題的規模極小時必須用直接給出解答而不再進行遞歸調用,因而每次遞歸調用都是有條件的(以規模未達到直接解答的大小為條件),無條件遞歸調用將會成為死循環而不能正常結束。
為了理解遞歸算法,現舉一個實例說明如下:
問題描述:
求解Fibonacci數列的第10個位置的值?(斐波納契數列(Fibonacci Sequence),又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*))
Java代碼清單:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.bjpowernode.test; public classFab { public static void main(String args[]){ System.out.println(fab( 5 )); } private static int fab( int index){ if (index== 1 || index== 2 ){ return 1 ; } else { return fab(index- 1 )+fab(index- 2 ); } } } |
程序分析:
這個實例是非常經典的實例,主要是利用遞歸實現了Fibonacci數列。這個遞歸算法的出口是在
1
2
3
|
if (index== 1 || index== 2 ){ return 1 ; } |
這個代碼段上,如果程序的index符合條件就會停止進行遞歸。所以這個程序的運行流程是:
程序分析到這里,遞歸的實現也就完成了,讀者可以自己簡單的做個demo,感受一下這個算法的精妙之處,其實很多人都在說算法難,難于上青天,其實掌握算法的根才是最重要的,什么是算法的根呢,就拿這個遞歸算法來說吧,我感覺這個根就是那個出口,只要找到這個出口所在,那么算法自然而然就能水到渠成了。
以上所述是小編給大家介紹的Java遞歸算法詳解(動力節點整理),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!