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

#include <stdio.h> int is2pow(int n) { if (n == 1) { return 1; } else if (n % 2 != 0) { return 0; } else if (n % 2 == 0) { return is2pow(n / 2); } } int main() { int x; scanf("%d", &x); printf("%d", is2pow(x)); return 0; }
这段代码定义了一个递归函数 `is2pow`,用来判断一个整数是否是2的幂次方。如果是,返回1;否则返回0。主函数读取一个整数并输出判断结果。

- 递归的终止条件 `n == 1` 是正确的,因为1是2的0次方。但需要考虑 `n` 为0的情况,0不是2的幂,当前代码没有处理这个边界情况,会导致无限递归或错误结果。
- 函数中 `else if (n % 2 == 0)` 这个分支其实可以省略,因为如果 `n` 不是奇数,就一定是偶数,直接递归调用即可。但这不是主要问题。