Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的递归_Javascript_Recursion - Fatal编程技术网

javascript中的递归

javascript中的递归,javascript,recursion,Javascript,Recursion,为了避免破坏堆栈,我想在javascript中递归时放弃堆栈,一种解决方案是使用setTimeout和timeOut 0。还有其他解决办法吗?先谢谢你 我想将一个大的用户数组导入数据库,并在任务完成时调用回调。代码如下: function importUser(userBigCollection,callback) { (function addUser() { var record = userBigCollection.getOneRecord() ; //Pop one reco

为了避免破坏堆栈,我想在javascript中递归时放弃堆栈,一种解决方案是使用setTimeout和timeOut 0。还有其他解决办法吗?先谢谢你

我想将一个大的用户数组导入数据库,并在任务完成时调用回调。代码如下:

function importUser(userBigCollection,callback) {
  (function addUser() {
   var record = userBigCollection.getOneRecord() ; //Pop one record from collection
   db.insert(record, function(error) {
        if (err) { callback(error); return }
        if (userCollection.empty()) {
          // All users have been created 
           callback();
         } 
    else {
    setTimeout(addUser, 0);
      }
   } })();
}

谢谢你的回复

此递归代码的最大运行深度为10次递归:

function recursive(maxloops,othervars){
   if(maxloops==0) return FALSE;
   if(morerecursionneeded) return recursive(maxloops-1,othervars);
   return endofrecursion(othervars);
}

recursive(10,whatevervars);

基本情况如何为什么需要setTimeout来放弃递归?如果您不需要递归调用返回的值(如果您使用
setTimeout(),则最好为true),您可以粘贴一些代码并解释您试图实现的目标吗
,那么你应该能够使用一个简单的循环。另外,
setTimeout
零延迟实现你建议的任何类型的循环都会带来糟糕的性能。这取决于你试图使用递归的目的。如果你只想递归地做一些处理,那么setTimeout就是一个选项。如果你真的想若要返回答案,例如查找第n个Fibonacci数,您可能需要将因子重新计算到循环中。是否可以发布您实际尝试执行的操作?尝试使用
setTimeout()避免堆栈问题
零延迟就像试图通过在某人身上使用sledgehammmer来避免刺伤他们一样。这感觉就像你可以尝试阻止你的递归进入空间。使用一个计数器或一个接近你期望值的东西,保持堆栈跟踪低或重新设计,这样你就不需要太多的递归.