2008년 07월 22일
SICP, 1.11
(define (tribo n)
(if (< n 3)
n
(+ (tribo (- n 1))
(* 2 (tribo (- n 2)))
(* 3 (tribo (- n 3))))))
;Value: tribo
(tribo 20)
;Value: 10771211
(define (tribo2 n)
(define (tribo-iter a b c count)
(if (= count 0)
a
(tribo-iter b
c
(+ c (* 2 b) (* 3 a))
(- count 1))))
(tribo-iter 0 1 2 n))
;Value: tribo2
(tribo 1)
;Value: 1
(tribo 2)
;Value: 2
(tribo 0)
;Value: 0
(tribo 3)
;Value: 4
(tribo 4)
;Value: 11
(tribo2 0)
;Value: 0
(tribo2 1)
;Value: 1
(tribo2 2)
;Value: 2
(tribo2 3)
;Value: 4
(tribo 10)
;Value: 1892
(tribo2 10)
;Value: 1892
(tribo 30)
;Quit!
(tribo 20)
;Value: 10771211
(tribo2 20)
;Value: 10771211
----
생각보다 어려웠다. 역시 리커시브는 오묘해.
(if (< n 3)
n
(+ (tribo (- n 1))
(* 2 (tribo (- n 2)))
(* 3 (tribo (- n 3))))))
;Value: tribo
(tribo 20)
;Value: 10771211
(define (tribo2 n)
(define (tribo-iter a b c count)
(if (= count 0)
a
(tribo-iter b
c
(+ c (* 2 b) (* 3 a))
(- count 1))))
(tribo-iter 0 1 2 n))
;Value: tribo2
(tribo 1)
;Value: 1
(tribo 2)
;Value: 2
(tribo 0)
;Value: 0
(tribo 3)
;Value: 4
(tribo 4)
;Value: 11
(tribo2 0)
;Value: 0
(tribo2 1)
;Value: 1
(tribo2 2)
;Value: 2
(tribo2 3)
;Value: 4
(tribo 10)
;Value: 1892
(tribo2 10)
;Value: 1892
(tribo 30)
;Quit!
(tribo 20)
;Value: 10771211
(tribo2 20)
;Value: 10771211
----
생각보다 어려웠다. 역시 리커시브는 오묘해.
# by | 2008/07/22 19:42 | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]