在线编译器 C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%2==0){ printf("0"); }printf("1"); return (is_prime(n,delitel++)); } int main() { int x,all; scanf("%d",&x); all=is_prime(x,2); if(all==1){ printf("YES"); }else printf("NO"); return 0; }
这段代码试图判断一个数是否为素数,但存在逻辑错误和无限递归问题。

- 函数 `is_prime` 没有正确的终止条件,每次调用都会再次调用自身,导致无限递归,程序会崩溃。
- 判断素数的逻辑不正确:当前代码只检查了是否能被2整除,然后立即打印结果并递归,没有检查其他可能的除数,也没有正确返回判断结果。
- 递归调用时 `delitel++` 是后置递增,实际传入的值没有增加,同样会导致无限递归。

- 思考如何用递归实现素数判断:需要有一个基准情况(比如当除数大于n的平方根时返回1),以及递归情况(如果n能被当前除数整除则返回0,否则用下一个除数继续递归)。
- 注意递归函数应该返回判断结果(0或1),而不是在函数内部打印,主函数中已经根据返回值打印了"YES"或"NO"。