Функция возврата не работает в моем коде, вызывая бесконечный цикл

#javascript #recursion

#javascript #рекурсия

Вопрос:

Я решаю проблему рекурсии в JavaScript. Однако, когда первый оператор if имеет значение true, оператор return не завершает работу скрипта, что приводит к бесконечному циклу.

 function steps(n, row = 0, col = 0, stair = '') {
  if (row === n) {
    return;
  } 

  if (col >= n ) {
    console.log(stair);
    steps(n, row   1);
  } 

  if (col <= row) {
    stair  = '#';
  } else {
    stair  = ' ';
  }
  
  steps(n, row, col  1, stair)
}
 

Комментарии:

1. Как вы вызываете эту функцию?

Ответ №1:

Нет, проблема в том, что вы не возвращаетесь после своего первого рекурсивного вызова, поэтому он всегда будет также выполнять второй, и этот не увеличивается row , так что это бесконечный цикл.

Это работает:

 function steps(n, row = 0, col = 0, stair = '') {
  if (row === n) {
    return;
  } 

  if (col >= n ) {
    console.log(stair);
    steps(n, row   1);

  } else {
    if (col <= row) {
      stair  = '#';
    } else {
      stair  = ' ';
    }
  
    steps(n, row, col  1, stair)
  }
}

// try it:
steps(5); 

Ответ №2:

Спасибо, Кристиан, что указал, что я пропускаю возврат. Теперь это мой рабочий код:

 function steps(n, row = 0, col = 0, stair = '') {

  if (row === n) {
    return 0;
  } 

  if (col >= n ) {
    console.log(stair);
    steps(n, row   1);
    return;
  } 
  
  if (col <= row) {
    stair  = '#';
  } else {
    stair  = ' ';
  }
  
  steps(n, row, col  1, stair)
}