首页 > 解决方案 > JS 函数在递归调用期间返回“未定义”

问题描述

我正在尝试解决这个问题,我必须在数组中添加任意 2 个数字,并且总和应该等于特定的目标数字。我已经使用循环做到了这一点,但我决定也使用递归来做到这一点。请告诉我我做错了什么?

谢谢

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
  function findIndices(i, j) {
    const possibleTarget = nums[i] + nums[j];

    if (possibleTarget === target) {
      return [i, j];
    } else if (j <= nums.length - 1) {
      findIndices(i, j + 1);
    } else {
      findIndices(i + 1, j + 1);
    }
  }
  return findIndices(0, 1); //undefined
};

标签: javascriptnode.jsrecursion

解决方案


在这样的两个递归调用之前添加return,以便递归获得的结果返回到调用链:

var twoSum = function (nums, target) {
  function findIndices(i, j) {
    const possibleTarget = nums[i] + nums[j];

    if (possibleTarget === target) {
      return [i, j];
    } else if (j <= nums.length - 1) {
      return findIndices(i, j + 1);
    } else {
      return findIndices(i + 1, j + 1);
    }
  }
  return findIndices(0, 1); //undefined
};

推荐阅读