liczba pierwsza rekurencyjnie

0

Witam

Mam taki problem napisałam rekurencyjnie funkcję, która ma za zadanie w postaci rekurencyjnej sprawdzić czy wprowadzona przez użytkownika liczba jest liczbą pierwszą, nie mogę użyć jakiejkolwiek pętli.Jakiej liczby nie wprowadzę za każdym razem jest zwracana wartość logiczna true. Zatem wynik dla każdej liczby jest taki iż jest ona pierwsza np. dla n=10 lub n=11, n=13, n=14 za każdym razem jest true.
Co robię źle ? Będę wdzięczna za odpowiedzi. Pozdrawiam. Poniżej kod.

#include<stdio.h>
#include<stdbool.h>
#include<math.h>




bool rek(n,i)
{
	
	if((n%i!=0)&&(i<n))
	{
		
		return rek(n,i+1);
	}
	else
	{		
	if(n==i) return true;
	else return false;
	}
}


 int main()

{
	int i=2, n;
	printf("podaj liczbe  ");
	scanf("%d",&n);
	printf("%d",n);
	rek(n,i);
	if(rek)
	printf("tak");
	else
	printf("nie");
	
	system ("pause");
	return 0;
}
1

Chyba znalazłem odpowiedź.

Zamień:

rek(n,i);
if(rek)

na:

if(rek(n, i)) 
0

dzięki działa

2

Można też nieco estetyczniej:

#include <iostream>

int recPrimeTest(int n);
int recPrime(int n, int k);

int main() {
	std::cout << recPrimeTest(25) << "\n";
	std::cout << recPrimeTest(13) << "\n";
}
int recPrimeTest(int n) {
	if (n % 2 == 0) return 0;
	int k = 3;
	return recPrime(n, k);
}

int recPrime(int n, int k) {
	if (n % k != 0 && k * k <= n){
		return recPrime(n, k + 2);
	}
	else {
		if (k * k > n) return 1;
		return 0;
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1