SICP - exercise 1.11 - tree recursion
Before looking for efficiency, note that there is a logical error in the tail recursive version of your function: it does not terminate on negative values (while the first function does terminate). 

A way of correcting this error is simply to perform the check before calling f-iter. For instance:

(define (f n)
  (if (&lt; n 3)
      n
      (f-iter 2 1 0 n)))

(define (f-iter a b c count)
  (if (= count 0)
      c
      (f-iter (+ a (* 2 b) (* 3 c)) a b (- count 1))))


From the efficiency point a view, I performed a few (unscientific) tests in DrRacket and noticed the following facts:


If the auxiliary function is defined inside f, the execution is 30-35% faster (and I think this is also stylistically better!)
An additional speedup of 20-40% can be gained if we reverse the counter, making it starting from 0 and going to n.


The differences in execution times where noticeable with n greater than 15000.

And so this is the more efficient version according to those tests:

(define (f n) 
  (define (f-iter a b c count)
    (if (= count n)
        c
        (f-iter (+ a (* 2 b) (* 3 c)) a b (+ count 1))))
  (if (&lt; n 3)
      n
      (f-iter 2 1 0 0)))


Of course these differences can be accounted only to the compiler, not to a change of the algorithm, so that by using another compiler maybe no differences could be found, or they could even be reversed!