递归逻辑在Javascript中不起作用

时间:2019-06-06 12:02:47

标签: javascript recursion

所以我有一个返回对象的方法,该对象返回referrals of a individual

function getReferredUsers(userId) {
    const usersMap = {
        a : ['b', 'c'],
        b: ['d', 'e'],
        d: ['f', 'g']
    };


    return usersMap[userId] || [];
}

因此,在示例a directly referred b and c中。 b directly referred d and e等等。

因此d and e成为indirect referrals的{​​{1}}。 a对于f,g是间接的,而对于ad is also an indirect的。

直接获得3分,间接获得2分。

我们需要计算a的总分。

我尝试过

a

但是它不起作用。

我在做什么错了?

更新

var _opSum = 0; function getTotalReferralBonus(userId, bonus) { if(bonus === 0) return 0; let directUsers = getReferredUsers(userId); if(directUsers.length > 0) { for(let user of directUsers) { _opSum = getTotalReferralBonus(user, bonus -1) + bonus; } }else { _opSum += getTotalReferralBonus(userId, bonus -1); } return _opSum; } 将获得的总积分为a = 3 + 3 (for b,c) + 2 + 2 (for d,e through b) + 1 + 1 (for f,g through d through b)

1 个答案:

答案 0 :(得分:2)

您需要一个局部变量_opSum,并且需要从嵌套的Id中获得所有奖励。

function getReferredUsers(userId) {
  const usersMap = {
    a: ['b', 'c'],
    b: ['d', 'e'],
    d: ['f', 'g']
  };
  return usersMap[userId] || [];
}

function getTotalReferralBonus(userId, bonus) {
  var _opSum = 0; // local variable
  if (bonus === 0) return 0;
  let directUsers = getReferredUsers(userId);
  if (directUsers.length > 0) {
    for (let user of directUsers) {
      _opSum += getTotalReferralBonus(user, bonus - 1) + bonus; // add all instead of assignment
    }
  } else {
    _opSum += getTotalReferralBonus(userId, bonus - 1);
  }
  return _opSum;
}

console.log(getTotalReferralBonus('a', 3));