C - 递归函数较小的素数

时间:2018-01-10 00:22:53

标签: c recursion

我得到了这个练习,它希望我创建一个函数来检查一个数字是否是" 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 ;
        }
}

1 个答案:

答案 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函数。 所以你应该在你的代码中纠正它。

当然,您可以通过一些小的改动在一个功能中完成所有操作。