You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codewars代码练习求助:console.log输出正确但函数无正确返回值

问题排查:递归函数findN能打印结果但无法正确返回值

我一眼就看出问题所在了——这是递归函数里非常常见的一个坑:你在递归调用的时候没有返回调用结果,导致底层递归找到的正确值无法传递回顶层调用。

咱们来拆解下你的代码逻辑:
当你调用findN(4183059834009)时,函数会一层层递归下去,直到某个分支触发v == m,这时你用console.log(newN)打印出了正确值,并且return newN。但问题是,这个返回值只回到了它的上层递归调用,而你的上层调用里只是执行了findN(m,n,v);,没有把这个结果再return出去。这样一来,上层函数执行完递归后没有返回任何内容,最终整个函数的返回值就变成了undefined,而不是你期望的那个正确的newN。

修复方案

只需要修改递归调用的那一行,把它的结果return出去就行,同时可以删掉多余的newN = null;语句:

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;
    }
    // 关键修改:返回递归调用的结果,让值逐层传递回去
    return findN(m, n, v);
  } else if (v > m) {
    return -1;
  }
}

为什么这样改有效?

每一层递归调用的返回值都会被上层接收并继续返回,直到最开始的函数调用。这样当底层递归找到正确值时,这个值会沿着递归栈一路传递回来,最终成为整个函数的返回结果,而不是在中间层就“消失”了。

现在你再调用findN(4183059834009),不仅控制台会打印结果,函数也会正确返回这个值啦。

内容的提问来源于stack exchange,提问作者user9145607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:19