Предположим, у нас есть следующий рекурсивный метод:
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) );
}
}
Но есть ли способы, которые, как я думал,эффект от того, что стек не взорвется от рекурсий, особенно когда я ожидаю огромное количество рекурсивных вызовов?