Have always appreciated Haskell's tail-recursive one
fib = (fibs !!)
where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
main = putStrLn $ show $ fib 1000