Questions tagged «recursion»

递归是一种函数调用,其中函数调用自身。这样的函数也称为递归函数。结构递归是一种解决问题的方法,其中问题的解决方案取决于对同一问题的较小实例的解决方案。

3
Python:使用递归算法作为生成器
最近,我编写了一个函数来生成具有非平凡约束的某些序列。问题来自自然的递归解决方案。现在碰巧,即使对于相对较小的输入,序列也要成千上万,因此我宁愿使用我的算法作为生成器,而不是使用它来填充所有序列的列表。 这是一个例子。假设我们要使用递归函数计算字符串的所有排列。以下朴素算法采用一个额外的参数“存储”,并在找到一个参数时附加一个置换: def getPermutations(string, storage, prefix=""): if len(string) == 1: storage.append(prefix + string) # <----- else: for i in range(len(string)): getPermutations(string[:i]+string[i+1:], storage, prefix+string[i]) storage = [] getPermutations("abcd", storage) for permutation in storage: print permutation (请不要在意效率低下,这只是一个例子。) 现在,我想将函数转换为生成器,即产生置换而不是将其追加到存储列表中: def getPermutations(string, prefix=""): if len(string) == 1: yield prefix + string # <----- else: …


1
什么是同态?
通过阅读这个经典论文,我卡上paramorphisms。不幸的是,该部分很薄,并且Wikipedia页面什么也没说。 我的Haskell翻译是: para :: (a -> [a] -> b -> b) -> b -> [a] -> b para f base = h where h [] = base h (x:xs) = f x xs (h xs) 但是我不认为-我对类型签名或所需结果没有任何直觉。 什么是同质性,有什么有用的例子在起作用? 是的,我已经看过这些 问题,但是它们并没有直接涵盖同质性,仅指向了可能对参考有用的资源,但对学习材料却没有帮助。

30
递归的实际示例[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 什么是现实世界的问题,其中一个递归的方法是除了深度优先搜索(DFS)的自然的解决方案? (我不考虑河内塔楼,斐波那契数或现实世界中的阶乘问题。在我看来,这些问题有些人为设置。)
95 recursion 

5
递归调用javascript函数
我可以在变量中创建一个递归函数,如下所示: /* Count down to 0 recursively. */ var functionHolder = function (counter) { output(counter); if (counter > 0) { functionHolder(counter-1); } } 这样,functionHolder(3);将输出3 2 1 0。假设我做了以下事情: var copyFunction = functionHolder; copyFunction(3);将输出3 2 1 0如上。如果我再更改functionHolder如下: functionHolder = function(whatever) { output("Stop counting!"); 然后functionHolder(3);将给出Stop counting!,如预期的那样。 copyFunction(3);现在给出3 Stop counting!它所指的functionHolder,而不是函数(它本身指向的)。在某些情况下这可能是理想的,但是有没有一种方法可以编写函数,以便它调用自身而不是保存它的变量? 也就是说,是否可以仅更改线路,functionHolder(counter-1);以便3 2 1 0在调用时仍能完成所有这些步骤copyFunction(3);?我试过了,this(counter-1);但这给了我错误this …



6
继承与递归
假设我们有以下类: class A { void recursive(int i) { System.out.println("A.recursive(" + i + ")"); if (i > 0) { recursive(i - 1); } } } class B extends A { void recursive(int i) { System.out.println("B.recursive(" + i + ")"); super.recursive(i + 1); } } 现在让我们打电话给recursiveA类: public class Demo { public static …

1
Python:超过最大递归深度
我有以下递归代码,在每个节点上我都调用sql查询来获取属于父节点的节点。 这是错误: Exception RuntimeError: 'maximum recursion depth exceeded' in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879768c>> ignored RuntimeError: maximum recursion depth exceeded while calling a Python object Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in <bound method DictCursor.__del__ of <MySQLdb.cursors.DictCursor object at 0x879776c>> ignored 我调用以获得sql结果的方法: def returnCategoryQuery(query, variables={}): …

18
列出具有PHP递归功能的目录中的所有文件和文件夹
我试图遍历目录中的所有文件,如果有目录,遍历其所有文件,依此类推,直到没有更多目录可访问。每个处理的项目都将添加到下面的函数中的结果数组中。尽管我不确定我能做什么/我做错了什么,但是它不起作用,但是当处理下面的代码时,浏览器运行速度非常慢,不胜感激,谢谢! 码: function getDirContents($dir){ $results = array(); $files = scandir($dir); foreach($files as $key => $value){ if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){ $results[] = $value; } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) { $results[] = $value; getDirContents($dir. DIRECTORY_SEPARATOR .$value); } } } print_r(getDirContents('/xampp/htdocs/WORK'));
84 php  recursion 

3
假人的递归方案?
我正在寻找一些非常简单,易于掌握的递归方案和核心递归方案(催化变形,变形,同形等)的解释,它们不需要遵循大量的链接或打开类别理论教科书。我敢肯定,我在不知不觉中重塑了许多这样的方案,并在编码过程中将它们“应用”到了我的脑海中(我相信我们中的许多人都有),但是我不知道我的(共)递归方案是什么。使用被称为。(好的,我撒谎了。我只是在阅读其中的一些内容,这引发了这个问题。但是在今天之前,我还没有头绪。) 我认为这些概念在编程社区中的传播受到了人们可能会遇到的令人难以理解的解释和示例的阻碍,例如,在Wikipedia上以及在其他地方。 他们的名字也可能阻碍了它。我认为还有一些其他的数学名称较少(关于香蕉和铁丝网的东西?),但我也不知道我使用的递归方案的更可爱的名称是什么。 我认为使用示例数据类型代表简单的实际问题,而不是抽象数据类型(例如二叉树)会有所帮助。

4
使用收益递归
有什么方法可以混合使用递归和yield语句吗?例如,无限数生成器(使用递归)将类似于: def infinity(start): yield start # recursion here ... >>> it = infinity(1) >>> next(it) 1 >>> next(it) 2 我试过了: def infinity(start): yield start infinity(start + 1) 和 def infinity(start): yield start yield infinity(start + 1) 但是他们都没有做我想要的事情,第一个在屈服后停止start,第二个在屈服之后start,然后是发电机,然后停了下来。 注意:请知道,您可以使用while循环来做到这一点: def infinity(start): while True: yield start start += 1 我只想知道这是否可以递归进行。

4
递归函数从数据库结果生成多维数组
我正在寻找一个函数,该函数需要一个页面/类别的数组(来自平面数据库结果),并根据父ID生成一个嵌套页面/类别的数组。我想递归地执行此操作,以便可以进行任何级别的嵌套。 例如:我在一个查询中获取所有页面,这就是数据库表的样子 +-------+---------------+---------------------------+ | id | parent_id | title | +-------+---------------+---------------------------+ | 1 | 0 | Parent Page | | 2 | 1 | Sub Page | | 3 | 2 | Sub Sub Page | | 4 | 0 | Another Parent Page | +-------+---------------+---------------------------+ 这是我要最终在视图文件中处理的数组: Array ( [0] …

10
Node.js-超出最大调用堆栈大小
当我运行代码时,Node.js会"RangeError: Maximum call stack size exceeded"引发由过多的递归调用引起的异常。我尝试将Node.js堆栈大小增加sudo node --stack-size=16000 app,但Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将显示'Segmentation fault: 11'。是否有可能在不删除递归调用的情况下解决此问题?

9
使用foldr编写foldl
在真实世界的Haskell中,关于函数式编程的第4章: 用foldr编写foldl: -- file: ch04/Fold.hs myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a x) 上面的代码使我很困惑,有人叫dps用有意义的名字重写了它,使它更清晰: myFoldl stepL zeroL xs = (foldr stepR id xs) zeroL where …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.