You're looking for the natural way to traverse a list using recursion. Use this procedure as a template for your solution - it simply copies a list exactly as it is received:
(define (copy lst)
(if (null? lst)
'()
(cons (car lst)
(copy (cdr lst)))))
Notice the following points:
- The recursion ends when the input list is null, and given that we're building a new list, the correct value to return is the null list
- We're interested in building a new list, we do this by
cons
ing a new element for the output list, which in this case happens to be the first element of the input list (itscar
part) - Finally, the recursive step advances by invoking the procedure with the rest of the input list (its
cdr
part)
As usual, I end up my answers to people learning how to think recursively by recommending you take a look at either The Little Schemer or How to Design Programs, both books will teach you how to grok recursive processes in general, using Scheme.