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
Publicar un comentario