Skip to content

Why is this recursion example giving me an infinite loop?

This is driving me insane. Here is the code :

function laugh(){
  let counter = 10;
  if(counter <= 0){
    return;
  }
  else{
    console.log('laugh');
    counter--;
    laugh()
  }
}

Why is this giving me an infinite loop when it’s supposed to print ‘laugh’ 10 times?

Answer

Like other answers said, each laugh() created a new local counter.

The most appropriate recursive method here is to pass the counter as an argument:

function laugh(counter){
  if(counter <= 0){
    return;
  }
  else{
    console.log('laugh');
    laugh(counter - 1) // subtract 1 from the counter and recur
  }
}
laugh(10)

This is a pure function approach, reducing the reliance on global vars which can be affected by other functions. It’s generally a safer way to program than to use global variables when you don’t need to.