資料結構4 遞迴演算法

2021-08-17 22:54:01 字數 1649 閱讀 6803

遞迴演算法:開始不斷的呼叫自己,直到到達遞迴的出口,當到達遞迴的出口之後,最後呼叫的最先返回。做遞迴演算法最重要的是找到出口。

就好比棧 ,開始一直往棧裡面裝入東西,直到抵達出口的時候才開始往外面拿東西。

圖示左邊先不斷的呼叫,右邊是從棧頂開始不斷的返回。

例項1:求階乘

1

package

com.hone.recursion;23

public

class

fact

11if (n==0) return 1;

12else17}

1819

public

static

void

main(string args)

25 }

過程圖例項2:用對半法來查詢

1

package

com.hone.recursion;23

public

class

binsearch

12else

if (a[mid]

15else

16return

mid;17}

1819

public

static

void

main(string args) ;

21int x=33;

22int low=0;

23int high=a.length-1;

24system.out.println(high);

25int re=bsearch(a, x, low, high);

26if(re==-1)

29else32}

33 }

例項3:漢諾塔遊戲

1

package

com.hone.recursion;23

public

class

hannoitower

1112

//思路,首先應該將n-1個盤子在c的幫助下從a移到b

13 towers(n-1, from, aux, to);

1415

//在將盤子n從a直接移動c中

16 system.out.println("move disk "+n +" from " +from+" to "+to);

1718

//再將剩餘的n-1個盤子在a的幫助下從b移動到c中

19 towers(n-1, aux, to, from);20}

21public

static

void

main(string args)

2425 }

漢諾塔用遞迴呼叫是最好的例項,你只需要有大致的思路,其他的都可以交給演算法來處理。

了解遞迴的執行過程,最好的辦法就是用debug模式來分析程式執行的過程。

在很多情況下,遞迴能實現的事情,通常迴圈也可以實現。而且迴圈所需要的時間複雜度遠遠的低於遞迴的時間複雜度。 

資料結構 演算法 遞迴

遞迴在較為高階的數演算法實現中是常用的,比如深度優先搜尋,暴力搜尋。下面展示較為簡單的遞迴 執行的過程中。public void recurisve recurisve system.out.println str test public void test 測試 依次輸入是 k i h a 依次輸...

資料結構與演算法分析筆記(4) 遞迴

簡單來說,遞迴 recursion 就是程式簡單呼叫自身的技巧。乙個過程或 函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的 量。遞迴的能力...

資料結構 遞迴 演算法分析

使用遞迴的四個法則 基準情形 base case 必須總有某種基準情形,它無須遞迴就能解出.不斷推進 progress 對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須要使求解狀況朝接近基準的情形的方向推進.3.設計法則 假設所有的遞迴呼叫都能執行.4.合成效益法則 在求解乙個問題的同一例項時,切勿...