This is my Clojure solution to Chapter 1, Exercise 11:
(ns sicp.ch1.ex11)
(defn f
[n]
(if (< n 3)
n
(+ (f (dec n))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
(defn f-iter
([n]
(f-iter 2 1 0 n))
([a b c n]
(if (zero? n)
c
(f-iter (+ a (* 2 b) (* 3 c)) a b (dec n)))))
(every? #(= (f %) (f-iter %)) (range 10)) ; => true
(ns sicp.ch1.ex11)
(defn f
[n]
(if (< n 3)
n
(+ (f (dec n))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
(defn f-iter
([n]
(f-iter 2 1 0 n))
([a b c n]
(if (zero? n)
c
(f-iter (+ a (* 2 b) (* 3 c)) a b (dec n)))))
(every? #(= (f %) (f-iter %)) (range 10)) ; => true
No comments:
Post a Comment