Friday, June 21, 2019

SICP in Clojure: Chapter 1, Exercise 11

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

No comments: