Last active
September 28, 2017 12:27
-
-
Save rflechner/2b59e81381bc59306dff9cc4147d4f18 to your computer and use it in GitHub Desktop.
3 implementations of fibonacci in FSharp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// recursive | |
let rec fiboRec = | |
function | |
| 0L -> 0L | |
| 1L -> 1L | |
| n -> fiboRec (n-1L) + fiboRec (n-2L) | |
#time | |
for i in 0L..40L do | |
printfn "fiboRec of %d => %d" i (fiboRec i) | |
#time | |
// iterative | |
let fiboIterative1 (n:bigint) = | |
Seq.init (int n) id | |
|> Seq.fold (fun (n1,n2) items -> (n1+n2,n1)) (0L,1L) | |
|> fst | |
#time | |
for i in 0I..180I do | |
printfn "fiboIterative1 of %A => %A" i (fiboIterative1 i) | |
#time | |
fiboIterative1 2200I | |
// tail recursive | |
let fiboTailRec n = | |
let rec loop (n1,n2) i = | |
if i < n | |
then loop (n1+n2,n1) (i+1I) | |
else n1 | |
loop (0I,1I) 0I | |
#time | |
for i in 0I..180I do | |
printfn "fiboTailRec of %A => %A" i (fiboTailRec i) | |
#time | |
fiboTailRec 22I | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment