📜  递归 c 素数 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:12:22.214000             🧑  作者: Mango

递归 C 素数
什么是素数

素数是指只能被1和它本身整除的自然数,例如2、3、5、7、11、13等。素数在数学和密码学等领域有着广泛的应用。

递归实现素数判断

递归是一种思想,可以在实现某些算法时将其变得更加清晰。在递归实现素数判断时,我们可以将判断过程通过函数递归实现,具体步骤如下:

  1. 先对小于2的数进行特判,因为小于2的数都不是素数。
  2. 对大于等于2的数进行递归判断,从2到小于该数的一半,判断是否能被整除。若存在能够被整除的数,则该数不是素数;否则,该数是素数。

下面是递归实现素数判断的 C 代码:

#include <stdio.h>

int isPrime(int n, int i) { //i为待除数
    if(n < 2) { //小于2不是素数
        return 0;
    } else if(i == 2) { //循环至2,是素数
        return 1;
    } else if(n % i == 0) { //能被整除不是素数
        return 0;
    } else { //继续递归
        return isPrime(n,i-1);
    }
}

int main() {
    int n;
    printf("请输入一个整数:");
    scanf("%d",&n);
    if(isPrime(n,n/2)) {
        printf("%d是素数",n);
    } else {
        printf("%d不是素数",n);
    }
    return 0;
}
代码解析

首先,在isPrime()函数中,我们通过三种情况进行素数判断。如果待判定的数小于2,则不是素数;如果待除数已经循环至2,则是素数;如果能被待除数整除,则不是素数。否则,继续递归。

接着,在main()函数中,我们通过调用isPrime()函数判断输入的整数是否是素数。如果是素数,则输出“n是素数”;否则,输出“n不是素数”。

总结

递归可以使程序更加简洁清晰,但在实现时需要注意控制递归深度,以免导致堆栈溢出等问题。同时,使用递归时应该也尽量用尾递归,以减小栈空间的使用。