遞迴演算法 2

2021-08-29 19:01:22 字數 2235 閱讀 4319

/**  *

* @author sunnymoon  */

/**

* 概念介紹:

*  * 遞迴的二分查詢: 想用最少的比較次數在乙個有序的陣列中找到乙個給定的資料項。

*  * 非遞迴的二分查詢:二分查詢也可以用非遞迴的演算法,但是分治演算法通常要回到遞迴。分治算

*                  法常常是乙個方法,在這個方法中含有兩個對自身的遞迴的呼叫。

*  * 分治演算法:遞迴的二分查詢是分治演算法的一種實現方法。把乙個是問題分成兩個更小的問題,

*          並且解決它們。這個過程一直持續下去直到易於求解的基值情況,就不需再分了。

*          分治演算法常常是一上方法,在這個方法中含有兩個對自身的遞迴呼叫,分別對應於

*          問題的兩個部分。在二分查詢中,就有兩個這樣的呼叫,但是只有乙個真的執行了

*          (呼叫哪乙個取決於關鍵字的值)。        

* 遞迴的效率:呼叫乙個方法會有一定的代價和開銷。首先,控制必須須從當前位置轉移到呼叫

*            方法的開始處。其次,傳給這個方法的引數以及這個方法返回位址都要初壓到一

*            個棧裡,為的是方法能夠訪問引數以及知道返回值在儲存在**,這個過程也稱

*            "儲存現場"。遞迴方法的使用的本質是從概念上簡化了問題,而不是因為它更有

*            效率。當使用遞迴的效率很低的時候,就可以考慮如果把遞迴轉化成非遞迴。  */

classordarray    

public

intsize()    

public

intfind(longsearchkey)    

public

intrecfind(longsearchkey,intlowerbound,intupperbound)else

if(lowerbound > upperbound)elseelse

}   

}   

public

intrecfind2(longsearchkey,intlowerbound,intupperbound)   

else

}   

}   

}   

public

voidinsert(longvalue)   

public

voiddisplay()   

}   

}   

class

public

static

voidmain(string args)   

}   

/**

* 執行結果:

* 9

* 18

* 27

* 36

* 45

* 54

* 63

* 72

* 81

* 90

* 99

* 100

* 117

* 126

* 135

* 144

* found 100  */

/**

* 總結:

* 很多的數學問題都使用遞迴的方法解決,比如找兩個數的最大公約數,求乙個數的

* 乘方等等。如果有效率需求的時候,可以再考慮將遞迴轉化成非遞迴。  */

遞迴 演算法題解2

選擇b 遞迴工作棧裡面包括返回位址 本層的區域性變數和遞迴呼叫的形參代換用實參,所以正常情況下,無論遞迴過程有沒有使用區域性變數,轉換為非 遞迴過程 都需要用棧來模擬這個遞迴呼叫過程。當然,有一些特殊遞迴不用棧就可以直接轉換,比如尾遞迴 常係數遞推等,無論是否有區域性變數 直接排除ad,注意力集中在...

演算法基礎 遞迴2

基礎概念 演算法基礎 遞迴1 任務描述 設有集合s 生成該集合中元素的所有排列 容易想到,s的所有排列即ai s 的所有情形,這正符合遞迴形式的定義 下面先用vector傳值實現演算法 include include include using namespace std void permute ...

實驗2 遞迴演算法實驗

實驗2 遞迴演算法實驗 實驗內容 1.編寫乙個程式,使用遞迴演算法輸出乙個一維字元陣列中所有字元的全排列,假設字元都不一樣。例如的全排列為 a,b,c a,c,b b,a,c b,c,a c,a,b c,b,a 源 include using namespace std char s 500 ans...