我正在解决一个编码面试练习题。提示:
公司为每个客户分配一个会员 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"));
您需要在递归调用中添加
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"));