Ali Adravi
Ali Adravi

Reputation: 22723

JavaScript recursive function is returning strange value

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:

Upvotes: 1

Views: 78

Answers (2)

IT goldman
IT goldman

Reputation: 19485

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);

Upvotes: 3

Mister Jojo
Mister Jojo

Reputation: 22265

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));

Upvotes: 0

Related Questions