天天看點

Go語言學習心得--Go語言遞歸函數

遞歸,就是在運作的過程中調用自己。

既然說到遞歸,那我就得先說一下在JAVA語言中的遞歸,

遞歸的基本思想就是

“自己調用自己”,一個使用遞歸技術的方法會直接或間接的調用自己

遞歸構造包括兩個部分:

定義遞歸頭。什麼時候不調用自身方法,如果沒有頭,将陷入死循環

遞歸體。什麼時候需要調用自身方法,遞歸一般都是從案例中提現出來的,我們可以實作一下看看

Go語言學習心得--Go語言遞歸函數

遞歸算法代碼顯得很簡潔,但遞歸算法解題的運作效率較低。是以不提倡用遞歸設計程式。

在遞歸調用的過程中系統為每一層的傳回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,是以一般不提倡用遞歸算法設計程式。

在做遞歸算法的時候,一定把握出口,也就是做遞歸算法必須要有一個明确的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。

 遞歸算法會很容易造成記憶體占用過大的情況,慎用!

 下面我們會所一下這個Go語言中的遞歸算法吧。

文法格式:

func recursion() {
   recursion() /* 函數調用自身 */
}

func main() {
   recursion()
}
           

Go 語言支援遞歸。但我們在使用遞歸時,開發者需要設定退出條件,否則遞歸将陷入無限循環中。

遞歸函數對于解決數學上的問題是非常有用的,就像計算階乘,生成斐波那契數列等。

我們用Go語言實作階乘試試

Go語言學習心得--Go語言遞歸函數

階乘的結果

Go語言學習心得--Go語言遞歸函數

斐波那契數列

Go 語言的遞歸函數實作斐波那契數列:

Go語言學習心得--Go語言遞歸函數

執行個體結果如下

Go語言學習心得--Go語言遞歸函數

以上就是Go語言遞歸函數的使用