Ejercicios de recursión

 Factorial y Fibonacci:


#include <stdio.h>


// Función factorial (recursiva)

int factorial(int n) {

    if (n == 0 || n == 1) {

        return 1;

    }

    return n * factorial(n - 1);

}


// Función fibonacci (recursiva)

int fibonacci(int n) {

    if (n == 0) return 0;

    if (n == 1) return 1;

    return fibonacci(n - 1) + fibonacci(n - 2);

}


int main() {

    int numero, cantidad;


    // Prueba de factorial

    printf("Ingrese un número para calcular su factorial: ");

    scanf("%d", &numero);


    if (numero < 0) {

        printf("No existe factorial de negativos.\n");

    } else {

        printf("El factorial de %d es %d\n", numero, factorial(numero));

    }


    // Prueba de fibonacci

    printf("\nIngrese la cantidad de términos de Fibonacci: ");

    scanf("%d", &cantidad);


    if (cantidad < 0) {

        printf("No existe fibonacci de negativos.\n");

    } else {

        printf("Serie de Fibonacci con %d términos:\n", cantidad);

        for (int i = 0; i < cantidad; i++) {

            printf("%d ", fibonacci(i));

        }

        printf("\n");

    }


    return 0;

}




SUMA DE LOS NUMEROS NATURALES DE 1 HASTA N:



#include <stdio.h>


// Función iterativa

int sumaIterativa(int n) {

    int suma = 0;

    for (int i = 1; i <= n; i++) {

        suma += i;

    }

    return suma;

}


// Función recursiva

int sumaRecursiva(int n) {

    if (n == 0) return 0;

    return n + sumaRecursiva(n - 1);

}


int main() {

    int n;

    printf("Ingrese un número n: ");

    scanf("%d", &n);


    if (n < 0) {

        printf("No se puede calcular suma de naturales negativos.\n");

    } else {

        printf("Suma iterativa de 1 a %d = %d\n", n, sumaIterativa(n));

        printf("Suma recursiva de 1 a %d = %d\n", n, sumaRecursiva(n));

    }


    return 0;

}


MINIMO DE UN ARRAY DE NATURALES


#include <stdio.h>


// Función recursiva para calcular el mínimo

int minimoRecursivo(int arr[], int n) {

    if (n == 1) {

        return arr[0];

    }

    int minimoPrevio = minimoRecursivo(arr, n - 1);

    return (arr[n - 1] < minimoPrevio) ? arr[n - 1] : minimoPrevio;

}


int main() {

    int arr[] = {42, 17, 58, 3, 29, 11};

    int n = sizeof(arr) / sizeof(arr[0]);


    int minimo = minimoRecursivo(arr, n);


    printf("El mínimo del array es: %d\n", minimo);


    return 0;

}


Dada una cadena de carácteres imprimirla al revés. 

#include <stdio.h>

// Función recursiva que imprime una cadena al revés
void imprimirReversa(const char *cadena) {
    if (*cadena == '\0') {
        return; // caso base: fin de la cadena
    }
    imprimirReversa(cadena + 1); // llamada recursiva con el siguiente carácter
    putchar(*cadena);            // imprime el carácter actual al volver
}

int main() {
    char texto[] = "Hola Angel";

    printf("Cadena original: %s\n", texto);
    printf("Cadena al revés: ");
    imprimirReversa(texto);
    printf("\n");

    return 0;
}


OTRA FORMA:

#include <stdio.h>
#include <string.h>

// Función recursiva que imprime una cadena al revés
void imprimirReversa(const char *cadena, int indice) {
    if (indice < 0) {
        return; // caso base: ya no quedan caracteres
    }
    putchar(cadena[indice]); // imprime el carácter actual
    imprimirReversa(cadena, indice - 1); // llamada recursiva hacia atrás
}

int main() {
    char texto[] = "Hola Angel";
    int longitud = strlen(texto);

    printf("Cadena original: %s\n", texto);
    printf("Cadena al revés: ");
    imprimirReversa(texto, longitud - 1);
    printf("\n");

    return 0;
}




CALCULO DEL MCD POR MEDIO DEL ALGORITMO DE EUCLIDES

#include <stdio.h>

// Función recursiva para calcular el MCD (Euclides)
int mcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return mcd(b, a % b);
}

int main() {
    int x, y;
    printf("Ingrese dos números: ");
    scanf("%d %d", &x, &y);

    if (x < 0) x = -x; // aseguramos positivos
    if (y < 0) y = -y;

    int resultado = mcd(x, y);
    printf("El MCD de %d y %d es: %d\n", x, y, resultado);

    return 0;
}


FUNCION RECURSIVA QUE CUENTE LOS CEROS DE UN ARRAY


#include <stdio.h>

// Función auxiliar: cuenta ceros en un número
int contarCerosEnNumero(int num) {
    if (num == 0) {
        return 1; // caso especial: el número 0 tiene un dígito cero
    }
    if (num < 0) {
        num = -num; // trabajar con positivos
    }
    if (num == 0) return 0;
    if (num < 10) {
        return (num == 0) ? 1 : 0;
    }
    return ((num % 10 == 0) ? 1 : 0) + contarCerosEnNumero(num / 10);
}

// Función recursiva: cuenta ceros en todo el arreglo
int contarCerosEnArray(int arr[], int n) {
    if (n == 0) {
        return 0; // caso base: arreglo vacío
    }
    return contarCerosEnNumero(arr[n - 1]) + contarCerosEnArray(arr, n - 1);
}

int main() {
    int arr[] = {1020, 405, 0, 78, 900};
    int n = sizeof(arr) / sizeof(arr[0]);

    int cantidadCeros = contarCerosEnArray(arr, n);

    printf("La cantidad de dígitos cero en el arreglo es: %d\n", cantidadCeros);

    return 0;
}



FUNCION QUE INDIQUE SI UNA CADENA ES PALINDROMO

#include <stdio.h>
#include <string.h>
#include <ctype.h>

// Función recursiva que verifica si una cadena es capicúa
int esCapicua(const char *cadena, int inicio, int fin) {
    if (inicio >= fin) {
        return 1; // caso base: ya se compararon todos los pares
    }
    if (tolower(cadena[inicio]) != tolower(cadena[fin])) {
        return 0; // no coincide → no es capicúa
    }
    return esCapicua(cadena, inicio + 1, fin - 1);
}

int main() {
    char texto[100];
    printf("Ingrese una cadena: ");
    scanf("%99s", texto); // lee hasta 99 caracteres sin espacios

    int longitud = strlen(texto);

    if (esCapicua(texto, 0, longitud - 1)) {
        printf("La cadena \"%s\" es capicúa.\n", texto);
    } else {
        printf("La cadena \"%s\" NO es capicúa.\n", texto);
    }

    return 0;
}



Comentarios

Entradas populares de este blog