基礎算法整理(1)——遞歸與遞推


       程序調用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。——摘自百度百科

       遞推算法是一種用若干步可重復的簡運算(規律)來描述復雜問題的方法.
遞推是序列計算機中的一種常用算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定象的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該算法利用了計算機速度快和不知疲倦的機器特點。——還是摘自百度百科
      簡單來說,關於遞推和遞歸,概念如下:
void digui()
{
    if(你不懂)    digui();
    if(你懂了)    return  hehe;
}
void ditui()
{
   if(你沒懂)  ditui();
   if(你懂了)  cout<<"hehe";
}

怎么樣,用簡潔明快的方法就能讓你明白算法的真諦是不是很爽hhhhh

遞歸遞推作為基礎算法其實並不難,但還是有必要舉一些例題來看看= =

1.

小猴子第一天摘下若干桃子,當即吃掉一半,又多吃一個.第二天早上又將剩下的桃子吃一半,又多吃一個.以后每天早上吃前一天剩下的一半另一個.到第10天早上猴子想再吃時發現,只剩下一個桃子了.問第一天猴子共摘多少個桃子?

= =這踏馬其實就是一個口算題,放在這里只是為了加深算法印象

2.

有雌雄一對兔子,假定過兩個月便可繁殖雌雄各一的一對小兔子。問過n個月后共有多少對兔子?

 這是著名的斐波那契數列= =遞推必刷題之一,當然還有很多關於這道題的難題,暫時不一一列舉

3.角谷定理。輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算后,總可以得到自然數值1。求經過多少次可得到自然數1。 如:輸入22, 輸出

 22  11  34  17  52  26  13  40  20  10  5  16  8  4  2  1 

     STEP=16

= -簡單遞推不解釋。。。。

 

有人會問,要這么多水題來干嘛?我會說:水題不水永遠不知道這是水題= =

難題肯定有,只是太多太常見,找UVA隨便打幾個數就是一堆= -

由於本次算法簡單粗暴,所以詳解略少,整理動態規划的時候我會再搞出來一點遞推的東西。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM