Questions tagged «recursion»

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

9
log(n!)=Θ(n·log(n))吗?
我要证明log(n!)=Θ(n ·log(n))。 提示我应该用n n表示上限,而用(n / 2)(n / 2)表示下限。在我看来,这似乎并不那么直观。为什么会这样呢?我绝对可以看到如何将n n转换为n ·log(n)(即,记录方程的两边),但这有点倒退。 解决这个问题的正确方法是什么?我应该画递归树吗?对此没有任何递归,因此这似乎不是一种可行的方法。

6
Python是否优化尾部递归?
我有以下代码,失败并出现以下错误: RuntimeError:超过最大递归深度 我试图重写此代码以允许尾递归优化(TCO)。我相信,如果发生了TCO,则该代码应该会成功。 def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n) print(trisum(1000, 0)) 我是否应该得出结论,Python不执行任何类型的TCO,还是只需要以不同的方式定义它?

7
可重入函数到底是什么?
大多数 的 的 时代,再进入的定义转引自维基百科: 如果一个计算机程序或例程可以在之前的调用完成之前安全地再次调用(即可以安全地同时执行),则称为可重入 。要重入,可以使用计算机程序或例程: 必须不包含静态(或全局)非恒定数据。 不得将地址返回静态(或全局)非恒定数据。 必须仅对调用方提供的数据起作用。 绝对不能依赖于对单例资源的锁定。 不得修改自己的代码(除非在自己的唯一线程存储中执行) 不得调用非可重入计算机程序或例程。 如何安全定义? 如果一个程序可以安全地并发执行,是否总是意味着它是可重入的? 在检查代码的可重入功能时,应牢记的六点之间的共同点到底是什么? 也, 所有递归函数都是可重入的吗? 所有线程安全函数都可重入吗? 所有递归和线程安全函数都可以重入吗? 在写这个问题时,会想到一件事:再入和线程安全之类的术语是绝对绝对的,即它们是否具有固定的具体定义?因为,如果不是这样的话,这个问题就没有太大意义。

6
匿名递归PHP函数
是否可以具有递归和匿名的PHP函数?这是我尝试使其工作,但未传递函数名称。 $factorial = function( $n ) use ( $factorial ) { if( $n <= 1 ) return 1; return $factorial( $n - 1 ) * $n; }; print $factorial( 5 ); 我也知道这是实施阶乘的一种不好方法,这只是一个例子。

4
如何使用Bash递归创建不存在的子目录?
我正在创建一个快速备份脚本,该脚本会将一些数据库转储到一个漂亮的/整洁的目录结构中,我意识到我需要在创建目录之前进行测试,以确保目录存在。我拥有的代码可以运行,但是似乎有更好的方法可以做到这一点。有什么建议? [ -d "$BACKUP_DIR" ] || mkdir "$BACKUP_DIR" [ -d "$BACKUP_DIR/$client" ] || mkdir "$BACKUP_DIR/$client" [ -d "$BACKUP_DIR/$client/$year" ] || mkdir "$BACKUP_DIR/$client/$year" [ -d "$BACKUP_DIR/$client/$year/$month" ] || mkdir "$BACKUP_DIR/$client/$year/$month" [ -d "$BACKUP_DIR/$client/$year/$month/$day" ] || mkdir "$BACKUP_DIR/$client/$year/$month/$day"

17
可以将每个递归转换为迭代吗?
一个reddit线程提出了一个看似有趣的问题: 尾递归函数可以简单地转换为迭代函数。其他的可以通过使用显式堆栈进行转换。可以将每个递归转换成迭代吗? 帖子中的(counter?)示例是一对: (define (num-ways x y) (case ((= x 0) 1) ((= y 0) 1) (num-ways2 x y) )) (define (num-ways2 x y) (+ (num-ways (- x 1) y) (num-ways x (- y 1))

9
Angular指令中的递归
有一些流行的递归角度指令Q&A,它们都归结为以下解决方案之一: 根据运行时范围状态手动增量“编译” HTML 示例1 [ stackoverflow ] 示例2 [ angular jsfiddles页面 ] 完全不使用指令,而是引用自身的<script>模板 范例1 [ google群组 ] 第一个问题是,除非您全面地管理手动编译过程,否则无法删除以前编译的代码。第二种方法的问题是...不是指令,而是失去了其强大的功能,但是更紧迫的是,不能像指令一样对它进行参数化;它只是绑定到一个新的控制器实例。 我一直在手动执行an angular.bootstrap或@compile()in link函数,但这给我留下了手动跟踪要删除和添加的元素的问题。 有没有一种好的方法来使参数化的递归模式能够管理添加/删除元素以反映运行时状态?也就是说,具有添加/删除节点按钮和某些输入字段的树,其值向下传递到节点的子节点。也许是第二种方法与链接范围的组合(但是我不知道该怎么做)?

30
Java递归斐波那契序列
请解释以下简单代码: public int fibonacci(int n) { if(n == 0) return 0; else if(n == 1) return 1; else return fibonacci(n - 1) + fibonacci(n - 2); } 我对最后一行感到困惑,尤其是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释!

7
folder vs.foldl(或foldl')的含义
首先,我正在阅读的Real World Haskell说永远不要使用foldl,而是使用foldl'。所以我相信。 但我在朦胧时使用foldr对foldl'。尽管我可以看到它们摆在我面前的方式各不相同,但我还是很愚蠢,无法理解何时“哪个更好”。我想在我看来,使用哪个并不重要,因为它们都产生相同的答案(不是吗?)。实际上,我以前使用此构造的经验来自Ruby inject和Clojure的reduce,它们似乎没有“ left”和“ right”版本。(旁问:他们使用哪个版本?) 任何能帮助像我这样的聪明人挑战的见解将不胜感激!

15
如何在PHP中通过多维数组中的key => value搜索
有没有一种快速的方法来获取在多维数组中找到键值对的所有子数组?我不能说阵列有多深。 简单示例数组: $arr = array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>2,name=>"cat 2"), 2 => array(id=>3,name=>"cat 1") ); 当我搜索key = name和value =“ cat 1”时,该函数应返回: array(0 => array(id=>1,name=>"cat 1"), 1 => array(id=>3,name=>"cat 1") ); 我猜想函数必须递归才能深入到最深层次。
147 php  arrays  search  recursion 

22
“致命错误:最大功能嵌套级别达到'100',正在中止!”的解决方案!在PHP中
我做了一个函数,可以找到html文件中的所有URL,并对链接到发现的URL的每个html内容重复相同的过程。该函数是递归的,可以无休止地进行下去。但是,我通过设置一个全局变量来限制递归,该变量将导致递归在100次递归后停止。 但是,php返回此错误: 致命错误:达到最大功能嵌套级别'100',正在中止!在D:\ wamp \ www \ crawler1 \ simplehtmldom_1_5 \ simple_html_dom.php中的第1355行 我在这里找到了一个解决方案:增加嵌套函数的调用限制,但这在我的情况下不起作用。 我引用了上面提到的链接的答案之一。请考虑一下。 “您是否安装了Zend,IonCube或xDebug?如果是,那可能就是您收到此错误的地方。 几年前,我碰到了这个问题,最后是Zend将该限制放在这里,而不是PHP。当然,删除它会让您超过100次迭代,但最终将达到内存限制。” 有没有一种方法可以提高PHP中的最大函数嵌套级别
137 recursion  xdebug  php 

9
自我参照结构定义?
我已经很长时间没有写C了,所以我不确定应该如何去做这些递归的事情……我希望每个单元格都包含另一个单元格,但是随着“字段'child'的行类型不完整”。这是怎么回事? typedef struct Cell { int isParent; Cell child; } Cell;
134 c  recursion  struct  typedef 


7
嵌套的defaultdict defaultdict
有没有办法使defaultdict也成为defaultdict的默认值?(即无限级递归defaultdict?) 我希望能够做到: x = defaultdict(...stuff...) x[0][1][0] {} 因此,我可以做到x = defaultdict(defaultdict),但这仅是第二层: x[0] {} x[0][0] KeyError: 0 有一些食谱可以做到这一点。但是,仅使用常规的defaultdict参数就可以做到吗? 请注意,这是在问如何执行无限级递归defaultdict,因此它与Python不同:defaultdict的defaultdict?,这是执行两级defaultdict的方法。 我可能最终会使用束模式,但是当我意识到自己不知道该怎么做时,这引起了我的兴趣。

30
什么是递归,什么时候应该使用它?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 似乎经常在邮件列表和在线讨论中出现的主题之一是获得计算机科学学位的优点(或缺乏优点)。对于否定党来说,似乎反复出现的一个论点是,他们已经进行了多年编码,并且从未使用过递归。 所以问题是: 什么是递归? 什么时候使用递归? 人们为什么不使用递归?

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.