Online Compiler C

#include <stdio.h> int is_prime(int n, int delitel){ if(n%2==0){ printf("0"); }printf("0"); 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` 没有正确实现递归终止条件,并且无论输入如何都会输出 "0" 并无限递归。

- 你的递归函数缺少基本情况(base case)。当 `delitel` 达到什么条件时应该停止递归并返回结果?思考一下素数的定义:一个数如果不能被 2 到它平方根之间的任何整数整除,就是素数。
- 注意 `delitel++` 是后置递增,意味着每次递归调用时传入的仍然是原来的值,这会导致无限递归。你需要确保每次递归调用时 `delitel` 的值增加 1。