Способ вызова метода nextOdd уменьшит размер стека - PullRequest
0 голосов
/ 31 декабря 2018

Предположим, у нас есть следующий рекурсивный метод:

const nextOdd = (num, callback) => {
  const next= num+1;
  if(next % 2){
   return callback(next)
  } else {
    nextOdd(num,callback);
  }
}

Когда я вызываю nextOdd рекурсивно, тогда добавляется новая запись в мой стек.Поэтому я подумал, что есть разные способы получить меньший стек во время рекурсии:

Подход 1: Возврат при вызове метода nextOdd:

Идея этого подхода заключается в том, что метод будет выход итогда метод будет вызван.

const nextOdd = (num, callback) => {
  const next= num+1;
  if(next % 2){
   return callback(next)
  } else {
    return nextOdd(num,callback);
  }
}

Подход 2: Любой обратный вызов или рекурсия будут выполняться асинхронно:

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

const nextOdd = (num, callback) => {
  const next= num+1;
  if(next % 2){
   return process.nexctTick( () => callback(next))
  } else {
    return process.nextTick( () => nextOdd(next, callback) );
  }
}

Но есть ли способы, которые, как я думал,эффект от того, что стек не взорвется от рекурсий, особенно когда я ожидаю огромное количество рекурсивных вызовов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...