Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递归POW:警告:控件可能到达非void函数的末尾_C_Recursion_Warnings - Fatal编程技术网

C 递归POW:警告:控件可能到达非void函数的末尾

C 递归POW:警告:控件可能到达非void函数的末尾,c,recursion,warnings,C,Recursion,Warnings,这是一个实现pow的递归函数。 为什么编译器抛出警告:“警告:控件可能到达非void函数的末尾” 一种解决方案是在函数底部添加“return 0”,但覆盖率不会达到100%,那么如何解决这个问题呢 谢谢 double pow_recur( double base, int exponent ) { if (base == 0) { return 0; } if (exponent == 0) {

这是一个实现pow的递归函数。 为什么编译器抛出警告:“警告:控件可能到达非void函数的末尾”

一种解决方案是在函数底部添加“return 0”,但覆盖率不会达到100%,那么如何解决这个问题呢

谢谢

double pow_recur( double base, int exponent )
    {
        if (base == 0) {
            return 0;
        }
        if (exponent == 0) {
            return 1.0;
        } else if (exponent > 0) {
            if (exponent % 2 == 0) {
                return pow_recur(base * base, exponent / 2);
            }
            if (exponent % 2 == 1) {
                return base * pow_recur(base * base, (exponent - 1) / 2);
            }
        } else {
            return 1.0 / pow_recur(base, -exponent);
        }
    }

在检查指数是否为偶数时,将其更改为if-else,警告将消失。不需要同时检查偶数和奇数,如果不是偶数,则必须是奇数。

您的编译器不够聪明,无法知道指数%2只能是0或1。它一般假设指数%2是一个整数。如果既不是0也不是1,则函数pow_recur不返回任何内容。我们知道这永远不会发生,但编译器不会。@JL2210为什么P