Cómo obtener una función a partir de su definición recursiva

Una función recursiva tiene la siguiente forma general (es simplemente una especificación de la función general que hemos visto muchas veces):

Función ReturnType (Pasar argumentos apropiados)
{
si es un caso simple, devuelve el valor simple [caso base / condición de detención]
de lo contrario, llame a la función con una versión más simple del problema
}

Para que una función recursiva deje de llamarse a sí misma, necesitamos algún tipo de condición de detención. Si no es el caso base, entonces simplificamos nuestro cálculo usando la fórmula general.
Una forma útil de pensar en las funciones recursivas es imaginarlas como un proceso que se realiza donde una de las instrucciones es “repetir el proceso”.
Tienes que encontrar esta ‘ instrucción ‘. (y esto solo se puede hacer a través de la práctica. ¡Practica y practica!)


Ejemplos:
1) n!
largo hecho largo (largo largo n)
{
if (n == 0) devuelve 1;
else return (n * fact (n-1));
}

2) verifica la prima
bool isPrime (int p, int i = 2)
{
si (i == p) devuelve 1;
if (p% i == 0) devuelve 0;
return isPrime (p, i + 1);
}