草庐IT

递归和回溯

全部标签

javascript - javascript中的递归字符串反转函数?

我是一名经验丰富的前端工程师,CS背景较弱。我试图了解递归的概念。我能找到的大多数示例和声称的解释都没有以我认为易于理解的方式对其进行解释。我给自己设定了一个任务,即编写一个函数来递归地反转字符串。我知道必须有一个基本条件(即找到解决方案),但我无法弄清楚如何实际编写这样的东西并且可以使用演示来研究。有人可以提供示例功能吗? 最佳答案 类似于:functionreverse(str){if(str===""){return"";}else{returnreverse(str.substr(1))+str.charAt(0);}}所以

javascript - 递归函数 vs setInterval vs setTimeout javascript

我正在使用NodeJs并且需要调用无限函数,但我不知道什么是最佳性能。递归函数functiontest(){//mycodetest();}设置间隔setInterval(function(){//mycode},60);设置超时functiontest(){//mycodesetTimeout(test,60);}我想要在不崩溃服务器的情况下获得最佳性能。我的代码有几个算术运算。感谢任何优化javascript性能的建议。 最佳答案 小心..你的第一个代码会阻塞JavaScript事件循环。基本上在JS中是类似于应该处理的函数列表

javascript - Mustache JS,如何创建一个子列表数量未知的递归列表?

我已经在几个线程中看到过这个讨论,看起来这是(或现在)执行此操作的方法。但我似乎无法让它发挥作用。所以我一定遗漏了什么。输出应该看起来像parentsubchildsubsubchild我得到的是parentsubchild到目前为止我有什么模板{{#menu}}{{item}}{{#menu}}{{item}}{{/menu}}{{/menu}}jsvardata={menu:[{"item":"parent","menu":[{"item":"subchild","menu":[{"item":"subsubchild"}]}]}]};vartemplate=$("#templat

JavaScript 递归 : Maximum call stack size exceeded

我有一个递归函数,可以在Canvas上移动一些圆圈。覆盖的圆圈被放大(放大),所有其他圆圈被推开。插入的圆圈插入其他圆圈等等,直到缩放完成。我收到错误消息“超出最大调用堆栈大小”,我理解这个问题,但我就是不知道如何解决...我找到了解决一般递归问题的三种可能的解决方案:将递归改为迭代使用memoization使用SetTimeout但我认为我不能使用它们中的任何一个:我无法实现迭代,因为所需的操作数未知我不太了解内存,但我认为它也不适合(或者我错了,有人可以告诉我不同​​的说法?)我不能使用SetTimeout,因为它应该在这个特定的动画中阻止函数调用。我该如何解决这个问题?//Pus

javascript - ES6 立即调用递归箭头函数

这是我当前的代码:constfn=parameter=>{//if,else...fn(X);};fn(0);现在,我不能使用thisapproach因为我需要使用参数调用该函数,并且它必须可以递归调用。如何重构上述箭头函数使其立即调用并递归调用? 最佳答案 JavaScript为递归函数提供了一个很好的解决方案:命名函数表达式。因此我建议使用它而不是箭头函数:(functionfn(parameter){//if,else...fn(x);})(0); 关于javascript-ES6

循环变量和递归的javascript

我有一个问题,我在for循环中进行递归:functionfunc(node){for(vari=0;i显然,因为JavaScript没有block作用域,所以每次调用函数时都会修改同一个i变量。解决此问题的最佳方法是什么?假设使用常规EcmaScript3,我不能使用JavaScript1.7“let”。我知道之前有人问过这个问题,但其他问题似乎没有显示递归,它们显示了一个可以使用闭包的函数调用。 最佳答案 缓存数组的长度,因此您将拥有以下内容:functionrecurse(node){for(vari=0,count=node.

javascript - 按属性名称递归搜索对象中的值

我正在构建一个实用程序函数,该函数应搜索属性名称并在找到后返回其值。它应该递归地执行此操作://Functionutil.findVal=(object,propName)=>{for(letkeyinobject){if(key===propName){console.log(propName)console.log(object[key])returnobject[key]}else{util.findVal(object[key],propName)}}}//Inputobject:{photo:{progress:20}}//Usageutil.findVal(object,'

javascript - JQuery 模板 - 太多的递归

我正在使用jquery模板生成树结构以显示部分和项目的TreeView。数据结构如下所示,其中每个部分都有项目和部分,每个项目可以有更多部分:sectionitemsitemsectionsitemsectionssectionssectionsectionsitems...andsoon然后我的模板递归地互相调用:${text}{{eachsections}}{{tmpl($value)"sectionTmpl"}}{{/each}}${text}{{eachitems}}{{tmpl($value)"itemTmpl"}}{{/each}}{{eachsections}}{{tmp

javascript - 如何在返回单个对象时递归使用 Array.prototype.find()?

我试图解决的更大问题是,鉴于此数据:vardata=[{id:1},{id:2},{id:3},{id:4,children:[{id:6},{id:7,children:[{id:8},{id:9}]}]},{id:5}]我想创建一个返回{id:id}的函数findById(data,id)。例如,findById(data,8)应该返回{id:8},而findById(data,4)应该返回{id:4,children:[...]}.为了实现这一点,我递归地使用了Array.prototype.find,但是当return将对象混合在一起时遇到了麻烦。我的实现返回特定对象的路径。例

javascript - 递归地在ng-repeat中迭代时如何在ng-include中获取父元素

我制作了一个递归的ng-repeat元素,试图操纵事物变成了一场噩梦,因为我没有引用我正在迭代的父元素。ng-repeat看起来像这样:ng-repeat="(key,value)invalue"记住它是递归的,所以value中的每个值都会成为新值,所以我不能只使用ng-repeat中的“in”值。我想做这样的事情,比如检查父级是否是一个数组,但是$parent是一些奇怪的东西,而不是当前迭代值的父元素。我想做的事情的一些例子是:ng-show="isArray(parent)"ng-click="delete(parent,$index)"(作为我正在做的工作的一个例子,我不得不向我