是调用nextOdd方法将减少堆栈大小的方法

时间:2018-12-31 11:29:44

标签: node.js asynchronous recursion

假设我们具有以下递归方法:

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:任何回调或递归都会异步执行:

这个想法是一样的,我可以通过将要调用的方法放入event loop +中来清空上一次方法调用中的堆栈条目,以优先考虑其他操作如果有的话,先发生。

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

但是我认为的方法不会对递归产生任何影响,特别是当我期望大量递归调用时?

0 个答案:

没有答案