递归函数未返回预期的值

时间:2018-06-26 15:55:29

标签: javascript node.js

在此功能中,我试图计算方式的数量,可以对数量进行解码。 1应该被解码为a,3被解码为c,26被解码为z。 该函数计算正确的计数,但仅返回未定义的计数。 我认为它应该在正确的时间取消递归调用,并且到达“转义”块,但是不会按原样返回该数字。 谁能指出我的原因,为什么会这样?

function numWaysDecodable(msg) {
    msg = msg.toString().split("");

    function helper(msg, past = 99, count = 1) {
        if (msg.length === 0) {
            console.log("wtf count is:"+count);
            return count;
        }
        let head = msg.shift();
        if (head < 7 && past < 3) {
            count++
        } 
        //the below return statement was missing           
        return helper(msg, head, count);
    }
    return helper(msg);
}

console.log(numWaysDecodable(123));
固定代码仍然有问题,因为该算法在其他输入方面存在缺陷。 例如,对于输入1212,即使应该接收结果5,我们也返回4:

  1. 12 1 2;
  2. 1 2 12;
  3. 12 12;
  4. 1 2 1 2;
  5. 1 21 2;

我认为代码未计入nr.3,12 12;我不确定如何解决该问题。还有更多思考要做

1 个答案:

答案 0 :(得分:1)

您必须在每次递归函数调用中返回值,例如:

return helper(msg, head, count);

function numWaysDecodable(msg) {
    msg = msg.toString().split("");

    function helper(msg, past = 99, count = 1) {
        if (msg.length === 0) {
            console.log("wtf count is:"+count);
            return count;
        }
        let head = msg.shift();
        if (head < 7 && past < 3) {
            count++
        }            
        return helper(msg, head, count);
    }
    return helper(msg);
}

console.log(numWaysDecodable(123));