問題1.15

僕の解答

プログラムを修正してみる。

(define (cube x) (* x x x))
(define (p x)
	(display (list "p" x))
	(newline)
	(- (* 3 x) (* 4 (cube x))))
(define (sine angle)
	(display (list "sine" angle))
	(newline)
	(if (not (> (abs angle) 0.1))
	    angle
	  (p (sine (/ angle 3.0)))))

(display (sine 12.15))
(newline)

でまあ、5回呼ばれていると。

(sine 12.15)
(sine 4.05)
(sine 1.3499999999999999)
(sine 0.44999999999999996)
(sine 0.15)
(sine 0.049999999999999996)
(p 0.049999999999999996)
(p 0.1495)
(p 0.4351345505)
(p 0.9758465331678772)
(p -0.7895631144708228)
-0.39980345741334

引数を増やしていくと、だいたい5倍で、スペース、計算量が1増える感じ。だから対数的な増加か。増加の程度はO(log n)かな?

所感

angle/3をn回繰り返す、と考えればよかったのか…
もっと頭を使わないと…orz