Online Compiler C

#include <stdio.h> int is_prime(int n, int delitel) { if (n % delitel == 0 || n == 1) { return 0; } if (delitel * delitel > n) { return 1; } return is_prime(n, delitel + 1); } int main() { printf("%d", is_prime(1, 2)); return 0; }
这段代码定义了一个递归函数 `is_prime`,用于判断一个整数 `n` 是否为质数。它从除数 `delitel` 开始检查,如果 `n` 能被 `delitel` 整除或者 `n` 等于 1,就返回 0(不是质数);如果 `delitel` 的平方大于 `n`,就返回 1(是质数);否则递归调用自身,除数加 1。`main` 函数测试了 `n=1` 的情况。

- 当 `n=1` 时,函数在第一次调用中就会因为 `n == 1` 条件返回 0,这是正确的。但注意,对于 `n=2` 或 `n=3` 这样的质数,递归会一直进行到 `delitel * delitel > n` 才返回 1,这没问题。不过,对于 `n=4`,第一次检查 `n % delitel == 0` 时 `delitel=2`,会返回 0,正确。但有一个边界情况:如果 `n` 是负数或 0,函数行为未定义,因为质数通常只考虑正整数。

- 提示:考虑当 `n` 为 2 时,递归调用 `is_prime(2, 2)` 会先检查 `2 % 2 == 0`,返回 0,但 2 是质数。这说明你的除数起始值设置有问题,应该从 2 开始检查,但需要避免检查到 `n` 本身。可以思考如何调整递归的起始除数或条件,使得像 2 这样的数被正确判断为质数。