递归并不是以js中的return语句结束

问题描述 投票:0回答:1

这是一个简单的程序来检查 num 是否是 2 的幂,为此我使用了递归。不知怎的,它不起作用。我添加了一个断点,发现程序正在运行,它会返回 true 并返回 false,但即使在这之后它也返回未定义。

function check2Pow(num)
{

    function check(i)
    {
        let pow=Math.pow(2,i);
        if(pow === num)
        {
            return true;
        }
        else if(pow > num)
        {
            return false;
        }
        else
        {
            check(i+1);
        }

    }


    return check(0);
}

javascript recursion data-structures
1个回答
0
投票

您忘记在

return
之前写
check(i+1)
。如果省略
return
,则任何递归的结果都将被忽略。

你也可以用这句话来知道你是否有 2 的幂:

Math.log(num)/Math.log(2) % 1 === 0
© www.soinside.com 2019 - 2024. All rights reserved.