problem 2
4000000 以下のフィボナッチ数列の一般項で偶数の合計を求める問題。
(define (fib n) (define (fib-iter a b count) (if (= count 0) b (fib-iter (+ a b) a (- count 1)))) (fib-iter 1 0 n)) (define (p2 maxnum) (define (p2-iter n sum) (let ((fibn (fib n))) (if (> fibn maxnum) sum (p2-iter (+ n 1) (+ sum (if (= (modulo fibn 2) 0) fibn 0)))))) (p2-iter 1 0)) (print (p2 4000000))
フィボナッチは再帰ではなくて繰り返しがあることを思い出して SICP からコピペ。コピペいくないけど。scheme で繰り返し書くのはちょっと難しい。
- 末尾再帰にすること
- カウンタと計算結果を引数にして次々に渡していくこと
この 2 つが肝要であることは頭では分かっているのだけど。