Online Compiler C

#include <stdio.h> int is2pow(int n) { if(n/2==1 && n%2==0){ return 1; } if(n%2!=0){ return 0; }else if(n%2==0){ is2pow(n/2); } } int main() { int x; scanf("%d", &x); printf("%d", is2pow(x)); return 0; }
这段代码试图判断一个整数是否是2的幂次方,但存在逻辑错误。函数 `is2pow` 使用递归,但递归调用时没有正确返回结果,并且基础条件判断不准确。

- 递归调用 `is2pow(n/2)` 时,没有使用 `return` 语句,导致递归的返回值被丢弃,函数最终可能返回一个未定义的值。
- 基础条件 `n/2==1 && n%2==0` 只处理了 n 等于 2 的情况,但 2 的幂次方还包括 1(2^0)以及更大的数如 4、8 等,这个条件覆盖不全。