1. 程式人生 > >小猿圈之演算法學習

小猿圈之演算法學習

演算法分為很多種,小猿圈加加這篇文章詳解一下遞迴演算法,很多地方都有用到,小編也是現學現賣,咱們一起來看看吧。

定義:遞迴演算法:是一種直接或者間接地呼叫自身的演算法。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

遞迴演算法的實質:是把問題轉化為規模縮小了的同類問題的子問題。然後遞迴呼叫函式(或過程)來表示問題的解。

遞迴的原理,其實就是一個棧(stack), 比如求5的階乘,要知道5的階乘,就要知道4的階乘,4又要是到3的,以此類推,所以遞迴式就先把5的階乘表示入棧, 在把4的入棧,直到最後一個,之後呢在從1開始出棧, 看起來很麻煩,確實很麻煩,他的好處就是寫起程式碼來,十分的快,而且程式碼簡潔,其他就沒什麼好處了,執行效率出奇的慢.

遞迴演算法解決問題的特點:

  (1) 遞迴就是在過程或函式裡呼叫自身。

  (2) 在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。

  (3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

  (4) 在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。

遞迴過程一般通過函式或子過程來實現。

看一個案例:求n-1的階乘?

f(n)

{

 if(n == 0 || n == 1)

  {

  return 1;

  }

 else

  {

  return n*f(n-1); //自己呼叫自己,求n-1的階乘

  }

}

這就是遞迴原理...遞迴演算法得有遞迴出口,否則就會死迴圈...遞迴演算法效率較低,佔用棧空間較大,容易發生棧溢位。

看過小猿圈加加這篇文章相信大家對遞迴演算法有一個新的理解了,而且對迷迷糊糊的遞迴應該會清楚很多,有點自戀,別介意哈,小編也是從小猿圈學來的,一個免費的學習地方,大家有興趣可以直接去看看,當然也可以看