#lang sicp


;; (define (cont-frac-recursive n d k)
;;   (define (top-down kprime)
;;     (if (= kprime k)
;;       (/ (n kprime) (d kprime))
;;       (/ (n kprime) (+ (d kprime) (top-down (+ kprime 1))))))
;;   (top-down 1))
;; (define (tan x k)
;;   (define (top-down kprime xpow)
;;     (if (= kprime k)
;;       (/ xpow (- (* kprime 2) 1))
;;       (/ xpow (- (- (* kprime 2) 1) (top-down (+ kprime 1) (* xpow x))))))
;;   (top-down 1 x))

(define (tan x k)
  (let ((x2 (* x x)))
    (define (top-down kprime)
      (if (= kprime k)
        (/ x2 (- (* kprime 2) 1))
        (/ x2 (- (- (* kprime 2) 1) (top-down (+ kprime 1))))))
    (/ x (- 1 (top-down 2)))))

(display "tan(0.1) = 0.10033467208545054... (exact)")
(newline)
(display "tan(0.1) = ")
(tan 0.1 6)
(newline)
(display "tan(1.0) = 1.557407724654902... (exact)")
(newline)
(display "tan(1.0) = ")
(tan 1.0 6)
(newline)
(display "tan(1.55) = 48.07848247921896... (exact)")
(newline)
(display "tan(1.55) = ")
(tan 1.55 6)
(newline)
