当我在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);
答案 0 :(得分:3)
仅当您将结果存储在变量中或在调用方法中的其他位置使用它时,才使用返回值。否则结果无处可去。
例如,您可以编写类似
的内容var foo = findN(4183059834009);
将返回结果存储在名为foo
的变量中。
另一种选择是在类似于
的语句中直接使用返回的结果console.log(findN(1222655))
答案 1 :(得分:0)
实际问题是,您是递归调用函数,但不传递子函数调用的结果。目前findN
方法有三种不同的情况:
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;
}
}