Structure and Interpretation of Computer Programs.
$ racket
> (enter! "<which>.rkt")
> (square 2)
In contrasting iteration and recursion, we must be careful not to confuse the notion of a recursive process with the notion of a recursive procedure . When we describe a procedure as recursive, we are referring to the syntactic fact that the procedure definition refers (either directly or indirectly) to the procedure itself. But when we describe a process as following a pattern that is, say, linearly recursive, we are speaking about how the process evolves, not about the syntax of how a procedure is writen.
All primitive recursive functions are total and computable, but the Ackermann function illustrates that not all total computable functions are primitive recursive.