Define some basic functions:
$$p_i^n: \mathbb{N}^n \rightarrow \mathbb{N} : (x_1, x_2, \dots, x_n) \mapsto x_i $$
From now on I will use $\bar{x_n}$ to denote $(x_1, x_2, \dots, x_n)$
Define a composition:
Given functions
- $g_1, g_2, \dots, g_m$ each with signature $\mathbb{N}^k \rightarrow \mathbb{N}$
- $f : \mathbb{N}^m \rightarrow \mathbb{N}$
Construct the following function:
\begin{align}
h: \mathbb{N}^k \rightarrow \mathbb{N}: \bar{x_k}
\mapsto h(\bar{x_k}) = f ( & g_1(\bar{x_k}),
g_2(\bar{x_k}),
\dots,
g_m(\bar{x_k}) )
\end{align}
Define primitive recursion:
Given functions
- $ f: \mathbb{N}^k \rightarrow \mathbb{N} $
- $ g: \mathbb{N}^{k+2} \rightarrow \mathbb{N} $
Construct the following (piecewise) function:
$$
h : \mathbb{N}^{k+1} \rightarrow \mathbb{N} : \\ (\bar{x_k}, y + 1) \mapsto \begin{cases}
f(\bar{x_k}), & y + 1 = 0 \\
g (\bar{x_k}, y, h(\bar{x_k}, y)), & y + 1 > 0
\end{cases}
$$
All functions that can be made using compositions and primitive recursion on basic functions, are called primitive recursive. It is called that way by definition. While a link with functions that call themselves exists, there's no need to try and link them with each other. You might consider recursion a homonym.
This definition and construction above was constructed by Gödel (a few other people were involved too) in an attempt to capture all functions that are computable i.e. there exists a Turing Machine for that function. Note that the concept of a Turing Machine was not yet described, or it was at least very vague.
(Un)fortunately, someone called Ackermann came along and defined the following function:
- $Ack : \mathbb{N}^2 \rightarrow \mathbb{N}$
- $Ack(0, y) = y+1$
- $Ack(x+1, 0) = Ack(x, 1)$
- $Ack(x+1, y+1) = Ack(x, Ack(x+1,y))$
This function is computable, but there's no way to construct it using only the constructions above! (i.e. $Ack$ is not primitive recursive) This means that Gödel and his posse failed to capture all computable functions in their construction!
Gödel had to expand his class of functions so $Ack$ could be constructed.
He did this by defining the following:
Unbounded minimisation
- $g : \mathbb{N}^k \rightarrow \mathbb{N}$
- IF $\left[f(\bar{x_k}, y) = 0 \text{ AND } \\f(\bar{x_k}, z) \text{ is defined } \forall z < y \text{ AND } \\f(\bar{x_k}, z)\neq 0\right]$
THEN
$g(\bar{x_k}) = y$
ELSE
$g(\bar{x_k})$ is not defined.
This last one may be hard to grasp, but it basically means that $g((x_1, x_2, \dots, x_k))$ is the smallest root of $f$ (if a root exists).
All functions that can be constructed with all the constructions defined above are called recursive. Again, the name recursive is just by definition, and it doesn't necessarily have correlation with functions that call themselves. Truly, consider it a homonym.
Recursive functions can be either partial recursive functions or total recursive functions. All partial recursive functions are total recursive functions. All primitive recursive functions are total. As an example of a partial recursive function that is not total, consider the minimisation of the successor function. The successor function doesn't have roots, so its minimisation is not defined. An example of a total recursive function (which uses minimisation) is $Ack$.
Now Gödel was able to construct the $Ack$ function as well with his expanded class of functions. As a matter of fact, every function that can be computed by a Turing machine, can be represented by using the constructions above and vice versa, every construction can be represented by a Turing machine.
If you're intrigued, you could try to make Gödel's class bigger. You can try to define the 'opposite' of unbounded minimisation. That is, unbounded maximisation i.e. the function that finds the biggest root. However, you may find that computing that function is hard (impossible). You can read into the Busy Beaver Problem, which tries to apply unbounded maximisation.