console.log()输出的值应该是

时间:2018-04-27 11:29:46

标签: javascript

当我在codewar.com中编写代码时,遇到了一个困难。没有(正确)回报。但console.log()输出正确的值。你能救我吗?

function findN(m,n = 1,v = 0){
    if(m == 1){
        return n;
    }else if(v < m){
        v += n * n * n;
        n++;
        let newN = n - 1;
        if(v == m){
            console.log(newN);
            return newN;
        }
        newN = null;
        findN(m,n,v);

    }else if(v > m){
        return -1;
    }
}
findN(4183059834009);

2 个答案:

答案 0 :(得分:3)

仅当您将结果存储在变量中或在调用方法中的其他位置使用它时,才使用返回值。否则结果无处可去。

例如,您可以编写类似

的内容
var foo = findN(4183059834009);

将返回结果存储在名为foo的变量中。

另一种选择是在类似于

的语句中直接使用返回的结果
console.log(findN(1222655))

答案 1 :(得分:0)

实际问题是,您是递归调用函数,但不传递子函数调用的结果。目前findN方法有三种不同的情况:

  • 返回n:罚款
  • 返回-1:罚款
  • 致电findN(m,n,v); 并且不返回任何内容这种情况会发生,因为在这种情况下您不会返回任何内容,而javascript会自动返回undefined

如果要从函数调用中传递结果,则必须显式返回它:

return findN(m,n,v);

完整的代码示例应为:

function findN(m,n = 1,v = 0){
    if(m == 1){
        return n;
    }else if(v < m){
        v += n * n * n;
        n++;
        let newN = n - 1;
        if(v == m){
            console.log(newN);
            return newN;
        }
        newN = null;
        return findN(m,n,v);

    }else if(v > m){
        return -1;
    }
}