es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.