遞迴是指定義在自身上的函式,換句話說,函式的定義裡呼叫自己。在函式式程式設計裡,通常使用遞迴表示命令式程式設計裡的迴圈,許多人認為遞迴比迴圈更容易理解演算法。
要在f#裡使用遞迴,在函式定義的let關鍵字後加rec關鍵字就可以在函式中使用函式名。下面給出乙個示例
#light
let rec fib x =
match x with
| 1 -> 1
| 2 -> 1
| x -> fib (x - 1) + fib (x - 2)
printfn "(fib 2) = %i" (fib 2)
printfn "(fib 6) = %i" (fib 6)
printfn "(fib 11) = %i" (fib 11)
執行結果:
(fib 2) = 1
(fib 6) = 8
(fib 11) = 89
注意第四行開始的|相當於分支語句,在f#裡其功能為模式匹配,將在以後章節介紹。這個函式計算乙個fibonacci序列。他的結果集如下 1, 1, 2, 3, 5, 8, 13, …. 遞迴最適合表示fibonacci序列的演算法。
雖然遞迴是乙個功能強大的工具,但是要小心使用它。這是因為容易在不經意間寫出乙個遞迴,永遠不會終止。如上的fib函式,1和2的是基本分支,如果x大於或等於3,其亦會回基本分支;但如果x是小於1的,則x將持續呼叫更小值和更多的遞迴,直到計算機的極限。從而導致堆疊溢位。(system.stackoverflowexception).
Java基礎教程32 遞迴
本篇介紹遞迴,什麼是遞迴呢?遞迴就是自己呼叫了自己。很多練習題或者面試題,會考察遞迴的思想,到時候你要想起用遞迴的思想去解決問題。構成遞迴需具備的條件 1.子問題須與原始問題為同樣的事,且更為簡單 2.不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。為了描述遞迴,我們這裡演示計算階乘的值。當...
XSL基礎教程
xsl基礎教程 一 http www 128.ibm.com developerworks cn xml ccidnet xslfund index1.html xsl基礎教程 二 http www.ibm.com developerworks cn xml ccidnet xslfund inde...
ps基礎教程
ps基礎教程 軟體簡介 推薦版本 流行多用的版本cs2 cs5,推薦cs3和cs5,cs2版本較舊,不推薦使用。基礎教學目錄 第一課 photoshop工具欄的使用01 第二課 工具欄的使用02 第三課 photoshop圖層 第四課 色彩原理和圖層的混合模式 第五課 圖層的樣式 第六課 圖層蒙版和...