Sum All Primes recursive function

I tried solving this problem using recursion and I dont understand one thing about recursions…

To callback on the function checkPrime(), how come I need to add return?

How come the function doesn’t call back on itself without the return?

The function sumPrimes() already has a return checkPrime() to call the function and the function checkPrime() has a return sum that should end the function with the sum.

Why does checkPrime(num-1) need a return in the front?

Tell us what’s happening:
Describe your issue in detail here.

  **Your code so far**

function sumPrimes(num) {
var sum = 0;

function checkPrime(num) {
  if (num<=1) {
    return sum 
  }
  for (let i=2; i<num; i++) {
    if (num % i === 0) {
      return checkPrime(num-1)
    }
  }
  sum += num
  return checkPrime(num-1)
}

return checkPrime(num)
}

sumPrimes(10);
  **Your browser information:**

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36

Challenge: Sum All Primes

Link to the challenge:

I don’t this that this code does what yu think that it does. You aren’t really checking primality.

Can you please explain? The code passes all tests

Ohhhh… Your CheckPrime is just a faux recursion sumPrimes function.

The name choice is confusing.

function sumPrimes(num) {
  let sum = 0;

  function recursiveCheat(num) {
    if (num<=1) {
      return sum;
    }
    // This is the only part that checks for primality
    for (let i=2; i<num; i++) {
      if (num % i === 0) {
        return recursiveCheat(num-1);
      }
    }
    sum += num
    return recursiveCheat(num-1);
  }

  return recursiveCheat(num);
}

sumPrimes(10);

But this is really a confusingly written while loop

function sumPrimes(num) {
  let sum = 0;

  while (num > 1) {
    // This is the only part that checks for primality
    let isPrime = true;
    for (let i=2; i<num; i++) {
      if (num % i === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime)
      sum += num
    num--;
  }

  return sum;
}

sumPrimes(10);
2 Likes

On the why you need return, if you don’t have return inside a function it returns undefined