Ich versuche zu verstehen, wie rekursive Funktionen zu verwenden, und ich verstehe nicht, warum diese Funktion falsch ist. Ich glaube, es ist in Base Case 2, aber ich weiß nicht warum.Rekursive Primzahl Funktion C++
#include <iostream>
using namespace std;
// Returns 0 if value is not prime, 1 if value is prime
int IsPrime(int testVal, int divVal)
{
// Base case 1: 0 and 1 are not prime, testVal is not prime
if(testVal == 0 || testVal == 1){
return 0;
}
// Base case 2: testVal only divisible by 1, testVal is prime
if(testVal/1 == testVal){
return 1;
}
// Recursive Case
// Check if testVal can be evenly divided by divVal
// Hint: use the % operator
if(testVal % divVal != 1){
IsPrime(testVal, divVal);
}
// If not, recursive call to isPrime with testVal and (divVal - 1)
return 0;
}
int main(){
int primeCheckVal = 0; // Value checked for prime
// Check primes for values 1 to 10
for (primeCheckVal = 1; primeCheckVal <= 10; ++primeCheckVal) {
if (IsPrime(primeCheckVal, (primeCheckVal - 1)) == 1) {
cout << primeCheckVal << " is prime." << endl;
}
else {
cout << primeCheckVal << " is not prime." << endl;
}
}
}
Es ist wirklich nicht klar, was Sie mit 'erreichen wollen, wenn (testVal/1 == testVal)' - es wird ** ** immer wahr sein, da alles durch 1 geteilt wird sich gleich. – Steve
Es klingt, als müssten Sie lernen, wie Sie mit einem Debugger Ihren Code durchgehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Dadurch würden Sie feststellen, dass Sie 'testVal' oder' divVal' niemals ändern – NathanOliver