1

Here is my code, why it is returning 13 in place of 4:

const superNumber = (n) => {
  let nums = n.toString().split('').map(Number);
  let sum = parseInt(nums.reduce((x, y)=> x + y));
  console.log('Nums: ',nums, 'Sum: ', sum);
  if(sum > 9) {
     superNumber(sum);
  }
   return sum;
}

let result = superNumber(148);
console.log('Ans: ', result);

Here is the console log:

  • Nums: [1, 4, 8] Sum: 13
  • Nums: [1, 3] Sum: 4 // Calculated sum correctly but returning the previous value
  • Ans: 13
0

2 Answers 2

3

You forgot a return there:

if (sum > 9) 
    return superNumber(sum);
//  ^^^^^^ here you forgot to return

const superNumber = (n) => {
  let nums = n.toString().split('').map(Number);
  let sum = parseInt(nums.reduce((x, y) => x + y));
  console.log('Nums:', nums.toString(), ' Sum:', sum);
  if (sum > 9) {
    return superNumber(sum);
  }
  return sum;
}

let result = superNumber(148);
console.log('Ans: ', result);

Sign up to request clarification or add additional context in comments.

2 Comments

Your code appears identical to the OPs?
It's different: return superNumber(sum);
0

if you don't want to mess up with the return...

const superNumber = n =>
  {
  let
    nums = Array.from(n.toString(10))
  , sum  = nums.reduce((s,v) => s + +v, 0)
    ;
  console.log( 'Nums: ', ...nums, ' , Sum: ', sum );
 
  return  (sum < 10) ? sum :  superNumber(sum);
  }
 
console.log('Ans: ', superNumber(148));

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.