在线编译器 C

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

- 你的递归函数从除数1开始检查,但任何整数都能被1整除,所以第一次递归就会返回0,导致所有数都被判为非素数。你应该从除数2开始检查。
- 递归的终止条件 `delitel * delitel > n` 是正确的,但初始除数需要调整,否则逻辑会提前失败。