我试图理解如何使用递归函数,我不明白为什么这个函数是错误的。我相信它是在基础案例2中,但我不知道为什么。
#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;
}
}
}
答案 0 :(得分:0)
RecurringJob.AddOrUpdate("name", () => NowAsync(true), (string) null);
始终为真(如果您没有玩无穷无尽或NaN等奇怪的事情),那么可能无法达到预期效果(检查数字是否为只有可被1整除) - 尝试使用素数testVal/1 == testVal
和复合7
,你就会看到它。
因此,任何传递给您的函数的零或一个数字都将被错误地检测为素数。
要查看一个数字是否只能被1整除,您需要检查它是否不能被任何其他候选值整除。举例来说(伪代码):
15
顺便说一句,我并不完全相信测试的素数适合于递归解决方案。您可能希望查看非递归解决方案(如果您的目标是检测质数)或不同的问题(如果您的目的是学习递归)。