Skip to content
Advertisement

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?

Advertisement

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.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement