为什么 console.log 报告我的变量的值,但 return 却没有?

问题描述 投票:0回答:1

我正在解决一个编码面试练习题。提示:

公司为每个客户分配一个会员 ID,而您是 为这些 ID 实施校验位。

校验位应通过将每个中的所有数字相加来计算 会员 ID。如果总和的结果是一个大于 a 的数字 单个数字,需要再次迭代,并且 结果也应该加在一起。应重复此过程,直到 计算出一位数。

示例:对于会员ID“55555”,所有数字的总和为25。 因为这不是个位数,所以将 2 和 5 相加,并且 结果是 7,这是校验位。

所以我正在尝试为此采用递归策略。我似乎能够得到各种查询的正确答案,但我不明白为什么我的基本情况下的

return
返回
undefined
,但其上方的 console.log 返回正确的值
7
。想法?

function createCheckDigit(membershipId) {
  // Write the code that goes here.
  let checkDigit = membershipId;
  if ([...checkDigit].length === 1) {
    console.log(checkDigit); // this prints 7
    return checkDigit; // why doesn't this return 7?
  } else {
    let mIdList = [...checkDigit];
    sum = 0;
    for (let c in mIdList) {
      sum += Number(mIdList[c]);
    }
    createCheckDigit(sum.toString());
  };
}

console.log(createCheckDigit("55555"));
javascript recursion
1个回答
0
投票

您需要在递归调用中添加

return

function createCheckDigit(membershipId) {
  // Write the code that goes here.
  let checkDigit = membershipId;
  if ([...checkDigit].length === 1) {
    console.log(checkDigit); // this prints 7
    return checkDigit; // why doesn't this return 7?
  } else {
    let mIdList = [...checkDigit];
    sum = 0;
    for (let c in mIdList) {
      sum += Number(mIdList[c]);
    }
    // line below altered to return results of recursive call
    return createCheckDigit(sum.toString());
  };
}

console.log(createCheckDigit("55555")); 
© www.soinside.com 2019 - 2024. All rights reserved.