我得到了这个练习,它希望我创建一个函数来检查一个数字是否是" Prime",然后创建另一个函数来打印我检查的数字中有多少个较小的素数。问题是我需要创建一个递归函数来检查使用第一个函数(检查数字是否为素数的那个)的较小素数的数量。这是我到目前为止所得到的,我被困在这里。递归函数对我来说很困惑。
#include <stdio.h>
int main() {
int a;
scanf("%d", &a);
checkPrime(a);
smallerPrime(a);
}
int checkPrime (int number) {
if(number % 2 == 0) {
return 1;
} else {
return 0;
}
}
int smallerPrime (int number) {
if(checkPrime(number) % 2 != 0){
return ;
} else {
return ;
}
}
答案 0 :(得分:0)
我从评论中看到,你确实想检查数字是否是偶数,如果是,你想知道有多少较小的偶数使用递归,而不是标题中提到的素数,所以我的答案将参考。
您可以使用以下内容:
int smallerPrime (int number) {
static int count = -1; // so that the number itself will not be counted
if(number <1) //excluding 0 or negative numbers
return 0;
if(number !=2) {//we know the number has to be even so no check is needed
++count;
smallerPrime(number - 2);
return count+1; // the +1 is in order to count 2 as well
}
else {
return 0;
}
所以例如: 输入10将给出输出4(8,6,4,2)
正如paxdiablo所提到的,在这里使用递归并不是最好的主意。
如果数字很大,你的程序可能会崩溃。
此外,请注意,此代码仅适用于正数,因为我不确定您是否要计算除了它们之外的任何数字(负数(如-2,-4等)和0也被认为是偶数)。 我在这里排除了他们。
在main中,您需要将checkPrime
的返回值放在某个变量中,并使用它来确定是否需要使用smallerPrime
函数。
所以你应该在你的代码中纠正它。
当然,您可以通过一些小的改动在一个功能中完成所有操作。