[programming] 繰り返しでフィボナッチ数
id:higepon:20060416:1145173653 から
フィボナッチ数を計算する関数を、繰り返し(iteration)をつかって定義しなさい。再帰版は次の通り。(define (fib n) (cond ((= n 1) 1) ((= n 2) 1) (else (+ (fib (- n 1))(fib (- n 2))))))
チャレンジしてみた。こんな感じかな。
(define (fib n) (define (iter a b count max-count) (if (> count max-count) b (iter b (+ a b) (+ count 1) max-count))) (iter 1 1 3 n))
iter 中の条件分岐を減らすために、繰り返しは count = 3 から開始。
どうせだから Haskell 版も
fib = iter 1 1 3 where iter a b count max | count > max = b | otherwise = iter b (a + b) (count + 1) max