問題1.15, p.24

サンプルコード

;1code/problem-1-15.scm

(define (cube x) (* x x x))
(define (p x) (- (* 3 x) (* 4 (cube x))))

(define (sine angle c)
    (if (not (> (abs angle) 0.1))
        angle
        (p (sine (/ angle 3.0) #?=(+ c 1)))))

#?=(sine 12.15 0)

実行例

#?="./problem-1-15.scm":11:(sine 12.15 0)
#?="./problem-1-15.scm":9:(+ c 1)
#?-    1
#?="./problem-1-15.scm":9:(+ c 1)
#?-    2
#?="./problem-1-15.scm":9:(+ c 1)
#?-    3
#?="./problem-1-15.scm":9:(+ c 1)
#?-    4
#?="./problem-1-15.scm":9:(+ c 1)
#?-    5
#?-    -0.39980345741334

pは5回呼び出される。スペースは尾再帰なので\(\Theta(1)\)で、ステップ数は、aが3倍されると1増えるので\(\Theta(log_{3}(a))\)である。