diff --git a/sicp-ex-1.11.rkt b/sicp-ex-1.11.rkt new file mode 100644 index 0000000..2d858dd --- /dev/null +++ b/sicp-ex-1.11.rkt @@ -0,0 +1,27 @@ +; f(n) = n, when n < 3 +; f(n) = f(n - 1) + f(n - 2) + f(n - 3), when n >= 3 +(define fn 15) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; recursive +(define (f-rec n) + (if (< n 3) + n + (+ (+ (f-rec (- n 1)) + (f-rec (- n 2))) + (f-rec (- n 3))))) + +(f-rec fn) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; iterative +(define (f-iter n) + (f-iter-step 2 1 0 n)) + +(define (f-iter-step a b c count) + (if (< count 3) + a + (f-iter-step (+ a b c) a b (- count 1)))) + +(f-iter fn) +