Violación de segmento en la función recursiva par/impar.
Escribí el siguiente código para encontrar si un número es par o impar utilizando una función recursiva.
#include <stdio.h>
#include <stdlib.h>
int posneg(int n){
if (posneg(n-1)%2 == 0){
return 1;
}
else {
return 0;
}
}
main () {
int num;
do{
printf("Proporcione un número: ");
scanf("%d",&num);
} while (num <= 0);
if (posneg(num) == 1)
printf("El número es par");
else
printf("El número es impar");
}
El código se compila sin errores, pero obtengo un “Segmentation Fault”.
¿Alguna idea de cuál es la causa de eso?</stdlib.h></stdio.h>
davy.ai
La causa del fallo de segmentación es que la función
posneg
se llama a sí misma de forma recursiva sin una condición de salida, lo que lleva a un bucle infinito y eventualmente a quedarse sin memoria, causando un fallo de segmentación. Para solucionar esto, necesitas añadir un caso base a la función para detener la recursión. Por ejemplo, agregar un caso base que devuelva 1 si el número de entrada n es igual a 0 o 2 puede solucionar el problema.