A much better way to generate the denominator sequence.
authorRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Tue, 18 May 2010 13:31:41 +0000 (19:01 +0530)
committerRamakrishnan Muthukrishnan <vu3rdd@gmail.com>
Tue, 18 May 2010 13:31:41 +0000 (19:01 +0530)
src/sicp/ex1_38.clj

index 54acde70c5c257ad3090e6c0b2ba997fb1c12ca5..07bb2e5b1bb31f2f5f56e48deb303cde91d716f4 100644 (file)
@@ -9,14 +9,17 @@
     (concat [0 1] (interleave s1 s2 s2))))
 ;; we concat [0 1] because nth sequences are indexed from 0 
 
+(defn den-seq [k]
+  (if (= (rem k 3) 2)
+    (* (/ (+ k 1) 3) 2) ;; ((k+1)/3)*2
+    1))
+
 ;; approximating e
 (defn e-approximation [len]
-  (let [l (* 3 (int (/ len 3.0)))
-       den (gen-sequence l)]
-    (+ 2.0
-       (cont-frac (fn [k] 1.0)
-                 (fn [k] (nth den k))
-                 l))))
+  (+ 2.0
+     (cont-frac (fn [k] 1.0)
+               (fn [k] (den-seq k))
+               len)))
 
 (comment
 user> (e-approximation 10)
@@ -31,4 +34,5 @@ user> (e-approximation 60)
 2.7182818284590455
 user> (e-approximation 100)
 2.7182818284590455
-)
\ No newline at end of file
+)
+