Онлайн компилятор C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%delitel==0&&delitel<=n){ return 1; }if (n=delitel){ return 0; } if(n%delitel!=0&&delitel<=n){ return (is_prime(n,delitel+1));} } 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` 的递归实现没有正确处理所有情况,导致结果不正确。

- 在 `if (n=delitel)` 这一行,你使用了赋值运算符 `=` 而不是比较运算符 `==`,这会把 `delitel` 的值赋给 `n`,改变 `n` 的值,并且条件永远为真(除非赋值为0),导致函数提前返回0。
- 递归的终止条件不完整。当 `delitel` 大于 `n` 时,函数没有返回值,这会导致未定义行为。你需要考虑当 `delitel` 超过 `n` 的平方根或等于 `n` 时,应该返回什么结果。