Dado que veo que el tema de recursividad está gustando bastante propongo crear este hilo donde iré proponiendo diferentes retos a resolver en C sin usar iteración (bucles for, while, do while) ni goto, claro. Se pueden usar tantas funciones como se quieran.

De momento iré sacando los problemas de un pdf que tengo de ejercicios en Haskell y los iré adaptando a C. Pues venga, ¡Vamos al grano y presento los dos primeros retos!
1) Escriba una función contarNegativos que cuente cuantos números negativos existen en una lista
Ejemplo: dado el array {1, 4, -3, 2, -1, -8, 0, 1} debe devolver 3:
Aquí el código de plantilla:
Código C:
Ver original
#include <stdio.h> /* más codigo si hace falta */ int contarNegativos(int arr[], int n) { /* Escribir código */ return 0; } int main (void) { int arr[] = {1, 4, -3, 2, -1, -8, 0, 1}; int n = sizeof arr / sizeof *arr; /* calcular cantidad de negativos */ int cantidad = contarNegativos(arr, n); /* mostrar cantidad de negativos */ return 0; }
2) Escriba una función diag que tenga una lista de caracteres como parámetro y que dé como resultado los caracteres
en una diagonal.
Cadena:
Código C:
Resultado:Ver original
"abcde"
Código C:
Aquí el código de plantilla:Ver original
a b c d e
Código C:
Ver original
#include <stdio.h> #include <string.h> #include <stdlib.h> /* más codigo si hace falta */ char* diag(char* cadena, char* resultado) { /* Escribir código */ resultado[0] = '\0'; return resultado; } int main (void) { char cadena [] = "abcde"; // a partir de la cadena de caracteres retornar la nueva que tenga los caracteres en diagonal resultado = diag(cadena, resultado); //mostrar resultado return 0; }
Ya se irá complicando la cosa

Un saludo!