javascript中的递归
为了避免破坏堆栈,我想在javascript中递归时放弃堆栈,一种解决方案是使用setTimeout和timeOut 0。还有其他解决办法吗?先谢谢你 我想将一个大的用户数组导入数据库,并在任务完成时调用回调。代码如下:javascript中的递归,javascript,recursion,Javascript,Recursion,为了避免破坏堆栈,我想在javascript中递归时放弃堆栈,一种解决方案是使用setTimeout和timeOut 0。还有其他解决办法吗?先谢谢你 我想将一个大的用户数组导入数据库,并在任务完成时调用回调。代码如下: function importUser(userBigCollection,callback) { (function addUser() { var record = userBigCollection.getOneRecord() ; //Pop one reco
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来避免刺伤他们一样。这感觉就像你可以尝试阻止你的递归进入空间。使用一个计数器或一个接近你期望值的东西,保持堆栈跟踪低或重新设计,这样你就不需要太多的递归.