Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using recursion to find prime numbers

Tags:

c

This code is supposed to check if a user-inputted number is a prime number or not. I am executing the program on the cygwin terminal, and whenever I run it and enter a number, it says, "Segmentation fault (core dumped)". Any suggestions?

#include <stdio.h>

int prime(int num, int i, int count);

void main()
{
    int num, i=2, count=0, result;

    printf("Please enter a number: ");
    scanf("%d", &num);

    result = prime(num, i, count);

    if (result != 0)
        printf("num is not a prime number");
    else
        printf("num is a prime number");
}

int prime(int num, int i, int count)
{
    if (i < num)
    {
        if (num%i == 0)
        {
            count++;
            prime(num, i++, count);
        }
        else
            prime(num, i++, count);
    }
    return count;
}
like image 870
Michael Avatar asked Sep 01 '26 22:09

Michael


1 Answers

You use post increment i++ in your function parameter. This absolutely does nothing. Because the post increment occurs after execution. So your i variable is never incremented and makes infinite recursion which gives you segmentation fault.

You can fix it with pre-increment ++i or call function with i+1.

int prime(int num, int i, int count)
{
    if (i < num)
    {
        if (num%i == 0)
        {
            count++;
            prime(num, ++i, count);
        }
        else
            prime(num, ++i, count);
    }
    return count;
}
like image 116
ashiquzzaman33 Avatar answered Sep 03 '26 14:09

ashiquzzaman33