This is the recursive procedure for a function f(n) = n if n<3 and f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3) if n ≥ 3
(define (f n)
(if (< n 3)
n
(+ (f (- n 1))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
The problem set is to change it to an iterative recursion. I came up with this:
(define (g n)
(if (< n 3)
n
(g-helper n)))
(define (g-helper n)
(if (< n 3)
n
(+ (basemaker 0 1 (- n 1))
(g-helper (- n 1))
(* 2 (basemaker 0 2 (- n 2))
(g-helper (- n 2)))
(* 3 (basemaker 0 3 (- n 3))
(g-helper (- n 3))))))
(define (basemaker counter constant n)
(cond ((= 2 n) 2)
((= 1 n) 1)
((= 0 n) 0)
(else
(basemaker (+ counter constant) constant (- n constant)))))
Something is wrong:
> (f 3)
4
> (f 4)
11
> (f 5)
25
> (g 3)
6
> (g 4)
19
> (g 5)
45
>
Spent hours on this, but I can't see what I'm doing wrong. I know the code is repetitive and clunky, but I would like to see what I have not understood about the process before I refine the syntax.
Thanks.