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

#include <stdio.h> int is2pow(int n) { if (n < 1) return 0; if (n == 1) return 1; if (n % 2 == 0) { is2pow(n / 2); } else return 0; } int main() { printf("%d", 4); return 0; }
这段代码定义了一个函数 `is2pow`,用来判断一个整数是否是2的幂次方。但函数实现和主函数调用都有问题。

- 在 `is2pow` 函数中,当 `n` 是偶数时,你递归调用了 `is2pow(n / 2)`,但没有返回这个调用的结果。这会导致函数在递归返回时丢失返回值,最终可能返回不确定的值。
- 主函数中直接打印了数字4,而不是调用 `is2pow` 来测试它的功能。所以程序只会输出4,而不会判断4是否是2的幂。

- 检查递归调用时,确保每个分支都有明确的 `return` 语句,包括递归调用的结果也要返回。
- 修改主函数,让它调用 `is2pow` 并传入一个测试值(比如4),然后打印返回结果,这样才能验证函数是否正确。