プログラムに計算式とかせるのがすき5 フィボナッチ数が欲しい

気の向くままにschemeで殴り書きするシリーズと化してきました。

;;フィボナッチ数
(define (fib n)
  (cond ((= n 0) 0)
		((= n 1) 1)
		(else (+ (fib (- n 1))
				 (fib (- n 2))))))

;;フィボナッチ数2
(define (fib2 n)
  (let ((route5 (sqrt 5)))
	(* (/ 1 route5) (- (expt (/ (+ 1 route5) 2) n) (expt (/ (- 1 route5) 2) n)))))

;;フィボナッチ数3
(define (fib3 n)
  (let ((phi (/ (+ 1 (sqrt 5)) 2)))
	(/ (- (expt phi n) (expt (- phi) (- n))) (sqrt 5))))

下二つはウィキペディアを見ながら。

フィボナッチ数(フィボナッチすう、Fibonacci number)とは、イタリアの数学者レオナルド・フィボナッチ(ピサのレオナルド)にちなんで名付けられた数である

ちなみにどの関数でもある程度の値を超えると真っ当な値を返さなかったり帰って来なかったりする。
わたしのPCだと40overくらいからだめ。
んー。こういう用途ならメモ化するほうがいいのかも。