Dobra, muszę się spytać w kwestii jednego zadania:
Napisz funkcję, która w sposób rekurencyjny sprawdza, czy dana liczba jest liczbą pierwszą. Funkcja powinna przyjąć liczbę, którą ma sprawdzić i dzielnik, dla którego ma sprawdzić podzielność. Funkcja ma zwrócić 1, jeżeli a jest liczbą pierwszą, 0 w przeciwnym wypadku.
int is_prime_rec(int, int);
Napisz program, który wyświetla wszystkie liczby pierwsze w zadanym przedziale <x1, x2>, wprowadzonym z klawiatury. W przypadku podania przez użytkownika przedziału w którym nie ma liczb pierwszych, program powinien wyświetlić komunikat Nothing to show i zwrócić wartość 2, a w przypadku wprowadzenia błędnych danych wyświetlić komunikat Incorrect input i niezwłocznie zakończyć działanie z kodem błędu 1.
Uwaga W programie nie wolno używać zmiennych globalnych.
Uwaga W programie nie wolno używać słowa kluczowego static.
Uwaga W programie nie wolno używać pętli.
Przykładowe wejście:
podaj x1: 4
podaj x2: 10
Przykładowe wyjście:
5 7
Kiedyś już rozpisywałem to zadanie iteracyjnie, tutaj też podeślę swój kod:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int is_prime(int a);
int main(int argc, char *argv[])
{
int suma=0;
int i;
int a;
int x1,x2;
printf("Podaj poczatkowy zakres:");
if(scanf("%d",&x1)!=1)
{
printf("Incorrect input");
return 1;
}
printf("Podaj koncowy zakres:");
if(scanf("%d",&x2)!=1)
{
printf("Incorrect input");
return 1;
}
if(x2<x1)
{
printf("Incorrect input");
return 1;
}
for(i=x1;i<=x2;i++)
{
a=i;
is_prime(a);
if(is_prime(a)==1)
{
suma++;
printf("%d ",a);
}
}
if(suma==0)
{
printf("Nothing to show");
}
return 0;
}
int is_prime(int a)
{
int j;
int kontrola=0;
for(j=a;j>=1;j--)
{
if(a%j == 0)
{
kontrola++;
}
if(j==1 && kontrola==2)
{
return 1;
}
}
return 0;
}
Kwestia teraz tego, aby przerobić to rekurencyjnie. Pytanie tylko jak to zrobić?