Skip to content

Instantly share code, notes, and snippets.

@rflechner
Last active September 28, 2017 12:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rflechner/2b59e81381bc59306dff9cc4147d4f18 to your computer and use it in GitHub Desktop.
Save rflechner/2b59e81381bc59306dff9cc4147d4f18 to your computer and use it in GitHub Desktop.
3 implementations of fibonacci in FSharp
// 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