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.

Generando un nuevo número primo en una función sin parámetros.

Estoy haciendo un problema en el que se me solicita hacer una función generatePrime sin parámetros. La función debería devolver el número 2 cuando se llame por primera vez, 3 (segunda vez), 5 (tercera vez) y así sucesivamente.

Tengo la sensación de que esto se debe hacer con recursión. Pero no estoy seguro de cómo hacer una función recursiva sin parámetros.


Sin embargo, esto es solo una parte del programa: el programa completo en sí debería devolver los números primos entre algunos números low y high (excluyéndolos).

int main(){
int low, high, i;
scanf("%d %d", &low, &high); // Límites del intervalo (low, high)
...
for (i = low + 1; i < high; i++){...}
...
};

int generatePrime(){
...}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una función recursiva sin parámetros, puedes usar una variable estática dentro de la función que lleve el registro de la cantidad de veces que se ha llamado a la función. En este caso, podemos usar una variable estática count para llevar el registro de la cantidad de números primos generados hasta el momento.

    #include <stdio.h>
    
    int generatePrime(){
        static int count = 0;
        int isPrime = 1;
        int n = 2 + count; // el primer número primo es 2
    
        // comprobar si n es primo
        for (int i = 2; i <= n / 2; i++){
            if (n % i == 0){
                isPrime = 0;
                break;
            }
        }
    
        count++;
    
        if (isPrime){
            return n;
        }
        else{
            return generatePrime();
        }
    }
    
    int main(){
        int low, high, i;
        scanf("%d %d", &low, &high); // Límites del intervalo (low, high)
    
        for (i = low + 1; i < high; i++){
            printf("%d ", generatePrime());
        }
    
        printf("\n");
        return 0;
    }
    

    En la función generatePrime, primero comprobamos si n es un número primo usando un bucle for. Si n es primo, lo devolvemos. Si no, aumentamos la variable count y llamamos a la función de manera recursiva.

    En la función main, utilizamos un bucle for para generar números primos entre low y high (sin incluirlos) y los imprimimos. Ten en cuenta que comenzamos el bucle en low + 1 para excluir low, y utilizamos la función generatePrime para generar cada número primo.</stdio.h>

Comments are closed.