草庐IT

递归和回溯

全部标签

javascript - 如何使用非递归堆栈编写递归函数?

为了尝试在JavaScript中实现一个不会使旧浏览器因堆栈溢出而崩溃的PEG,我想制作一个以非递归方式解析字符串的解析表达式语法。你怎么做到这一点?感觉脑筋急转弯。假设您有这样的结构:一个文法有很多表达一个表达式有很多匹配器一个matcher有很多tokens(或者任何更好的词)token可以指向另一个expression,也可以是原始字符串或正则表达式。因此,如果它指向另一个表达式,这就是递归开始的地方。假设您这样定义层次结构:vargrammar=newGrammar('math');varexpression=grammar.expression;expression('mat

javascript - 为什么无限递归异步函数不会导致堆栈溢出?

我在想当异步函数无限递归地调用自身时会发生什么。我的想法是它不会导致堆栈溢出。但我无法准确指出为什么会这样。constfoo=async()=>{consttxt=awaitPromise.resolve("foo");console.log(txt);foo();}foo();上面的代码无限打印“foo”而不会溢出堆栈。我的想法是代码在概念上类似于下面,它不会导致堆栈溢出,因为对foo()的递归调用在回调内部,对的原始调用foo()将在此之前返回。constbar=()=>{console.log("foo");foo();}constfoo=()=>{setImmediate(ba

javascript - 为什么递归生成器函数在 ES2015 中不起作用?

我试图理解ES2015中的生成器,并用它创建了一个递归阶乘函数。但它不起作用。我已经提到了已经存在的问题,例如this关于这个话题,但没有帮助。function*fact(n){if(n谁能找到我在这里遗漏的任何明显问题?我在带有JavaScript-1.7的JSFiddle中使用它here 最佳答案 CananyonefindanyobviousissuesIammissinghere?fact返回一个迭代器,但您正试图将它与一个数字相乘:n*fact(n-1)。那行不通!因为fact返回一个迭代器,但您还想将迭代器的最后一个值与

javascript - 如何从对象中递归删除未定义的属性 - 同时保留构造函数链?

这是一个类似于Howtoremoveundefinedandnullvaluesfromanobjectusinglodash?的问题.但是,那里提出的解决方案不保留构造函数。除此之外,我只想删除那些以“_”开头的键。这就是我正在寻找的,但似乎无法从lodash获得:输入:新的缺点({key1:'value1',key2:{key21:'value21',_key22:未定义},key3:未定义,_key4:未定义})输出:{key1:'value1',key2:{key21:'value21'},key3:未定义例如functionCons(obj){_.extend(this,ob

javascript - jQuery 递归 AJAX 调用 promise

我仍在尝试弄清楚如何在递归AJAX调用中使用jQuery延迟对象。我有这样的代码functionrequest(page,items){//buildingtheAJAXreturnvalueforJSFiddledummyAJAXendpointvarret={totalPage:10,currentPage:page,items:[]};for(vari=page;i这是JSFiddlehttp://jsfiddle.net/petrabarus/BHswy/我知道如何在单个AJAX调用中使用promise,但我不知道如何在递归AJAX调用中使用它。我想以类似于下面的方式调用req

类中的 Javascript 递归

我正在尝试让递归方法在类上下文中工作。在我的类里面,我有以下方法:countChildren(n,levelWidth,level){if(n.children&&n.children.length>0){if(levelWidth.length但是,当我使用此方法时(以前我只是将它用作functioncountChildren=...时有效)它无法...找到(?)本身:无法在递归时读取未定义的属性“countChildren”。有人有什么想法吗? 最佳答案 问题的出现是因为在你的循环中,this被重新定义到内部函数范围。count

javascript - 如何跳出递归函数中的循环?

我正在处理一组类别对象,这些对象可以包含一组子类别对象。棘手的部分是这个嵌套数据的深度是未知的(并且可以改变)。(请参阅底部的示例。)我正在尝试做的是将“踪迹”返回到类别对象,但我遇到了各种困难。理想情况下,findCategory('b4')会返回:['c1','d2','d3','b4'](参见示例).我认为我的问题是我无法正确地打破由递归引起的嵌套循环。有时我会在我的足迹中获得额外的类别,或者当我认为我已经突破时,一些更深的嵌套类别最终会出现在我的足迹中。一个结果可能是这样的。很明显,它并没有终止b4处的循环,我不确定为什么会找到两次结果。b4FOUND["c1","d2","d

javascript - JavaScript 的尾递归优化?

对于之前版本的含糊不清,我向大家道歉。有人决定同情这个新来的女孩并帮助我重写这个问题-这是我希望能解决问题的更新(并且,感谢所有到目前为止一直慷慨回答的人):问题我是一名新的计算机科学专业的学生,​​在我大学的第一年。对于我的算法类的最终项目,我们可以选择任何我们喜欢的语言并实现一个“精炼”/“效率”算法,该算法在另一种语言中native(内部?),但在我们选择的语言中缺失。我们最近刚刚在类里面学习了递归,我的教授简要地提到了JavaScript没有实现尾递归。根据我的在线研究,新的ECMA脚本6规范包含此功能,但目前在任何(/大多数?)JavaScript版本/引擎中都没有?(抱歉,

Javascript递归settimeout

我刚刚开始研究javascript,所以希望这会很简单。我想制作自动播放的图像幻灯片。这非常简单,并且有一些关于它的教程,但由于某种原因我无法让它工作。这是我的:varimage1=newImage();varimage2=newImage();varimage3=newImage();image1.src="images/website6.jpg";image2.src="images/website7.jpg";image3.src="images/sunset.jpg";varimages=newArray("images/website6.jpg","images/websit

javascript - 递归搜索全局变量及其属性中的值

假设我想在window中所有声明的变量中搜索一个值,例如'StackOverflow'。我可以用这段代码做到这一点:functionglobalSearch(obj,value){for(varpinobj)if(obj[p]==value)return(p);}globalSearch(window,'StackOverflow');此代码将返回具有此值的变量的名称(或不返回任何内容)。因此,如果我声明了一个值为'StackOverflow'的变量,它将成功找到它。我的问题是我想更深入地搜索window的对象(及其自己的嵌套对象),以获得如下结果:varx='StackOverflo