I don't see why you can't write the closed form in a functional language as well. This only works for 1 =< N =< 70, for N >= 71 the approximation of Sqrt5 isn't good enough; you need to do more symbolic math so you can eliminate that term.
-module('fib').
-export([go/1]).
go(N) when N < 1 -> throw(badarg);
go(N) ->
Sqrt5 = math:sqrt(5),
round(1.0 / Sqrt5 * math:pow((1 + Sqrt5) / 2.0, N) - 1.0 / Sqrt5 * math:pow((1 - Sqrt5) / 2.0, N)).
rp(lists:map(fun fib:go/1, lists:seq(1, 71))).
[1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,
4181,6765,10946,17711,28657,46368,75025,121393,196418,
317811,514229,832040,1346269,2178309,3524578,5702887,
9227465,14930352,24157817,39088169,63245986,102334155,
165580141,267914296,433494437,701408733,1134903170,
1836311903,2971215073,4807526976,7778742049,12586269025,
20365011074,32951280099,53316291173,86267571272,
139583862445,225851433717,365435296162,591286729879,
956722026041,1548008755920,2504730781961,4052739537881,
6557470319842,10610209857723,17167680177565,27777890035288,
44945570212853,72723460248141,117669030460994,
190392490709135,308061521170130]
( 190392490709135 + 117669030460994 /= 308061521170130 )