问题标签 [recursion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
13908 浏览

sql - 防止触发器的相互递归执行?

假设您有表格PresentationsEvents. 保存演示文稿并包含基本事件信息(例如位置和日期)时,将使用触发器自动创建事件。(恐怕由于技术原因,不可能简单地将数据保存在一个地方并使用视图。)此外,稍后在演示文稿中更改此信息时,触发器也会将更新复制到事件中,像这样:

现在,客户想要这样,如果用户更改了事件中的信息,它也应该返回到演示文稿。由于显而易见的原因,我不能反过来:

毕竟,这会导致每个触发器一个接一个地触发。我可以做的是last_edit_by在两个表中添加一个包含用户 ID 的列。如果触发器使用特殊的无效 ID 填充(例如,通过使实际人员的所有用户 ID 为正,但脚本的用户 ID 为负),我可以将其用作退出条件:

这可能可行,但我想做的是向 SQL 服务器指示,在事务中,触发器应该只触发一次。有没有办法检查这个?或者也许是为了检查一个表是否已经受到触发器的影响?


感谢史蒂夫·罗宾斯(Steve Robbins)的回答:

只需将潜在的嵌套UPDATE语句包装在 IF 条件检查中即可trigger_nestlevel()。例如:

请注意,这trigger_nestlevel()似乎是基于 1 的,而不是基于 0 的。如果您希望两个触发器中的每一个都执行一次,但不是更频繁,只需检查trigger_nestlevel() < 3两个触发器。

0 投票
5 回答
14312 浏览

php - PHP数组,将数组项的深度递归地附加到具有“深度”键的数组中

根据最底部的示例数组,我希望能够将每个嵌入数组的深度附加到数组内部。例如:

根据下面显示的示例数组,深度为 1,因此它现在应该如下所示:

等等...

我所做的所有递归数组函数尝试都非常尴尬。但是,我查看了具有 getDepth 函数的 RecursiveArrayIterator 。我对如何将它附加到当前数组感到困惑......非常感谢任何帮助,谢谢。

0 投票
4 回答
6871 浏览

php - 在 smarty 中处理递归的最佳方法是什么?

我在 Smarty 中找到了几种处理递归的方法,主要是基于将模板包含在自身中,这似乎是一种荒谬的资源浪费。我找到了一个解决方案,由 Messju 在 Smarty 提供,似乎恰到好处 - 但它不受支持并且在最新版本的 smarty 中失败:(

有人问:我希望 smarty 打印出一个由条目数组定义的讨论线程。如果一个条目有一个或多个答案,则将这些答案列为数组中所述条目的子项,依此类推。

嵌套数组具有任意深度,并且每个条目将具有任意数量的子项。对我来说,这是我想在模板范围内做的事情,因为我认为它纯粹是显示逻辑。我不想在模板之外处理 HTML 或某种类型的 HTML 占位符。

我希望 smarty 将其打印为嵌套列表:

我开始意识到这可能是一个非常具体的问题,所以我想我会写一个聪明的插件来专门处理这个问题,尽管我宁愿有一个全面的解决方案。

有办法吗?

0 投票
3 回答
7324 浏览

sql - 如何在递归 SQL 查询中查找子树中的所有节点?

我有一个表,它定义了节点之间的子父关系:

如果parentID总是指向一个有效的现有节点,那么这自然会定义一个树结构。

如果parentID是,NULL那么我们可以假设该节点是根节点。

我将如何:

  1. 查找作为给定节点的后代的所有节点?
  2. 查找给定节点下的所有节点到特定深度?

我想将这些中的每一个都作为一个 SQL(我希望它一定是递归的)或两个相互递归的查询来完成。

我在 ODBC 上下文中执行此操作,因此我不能依赖任何供应商特定的功能。

编辑

  • 还没有写表,所以添加额外的列/表是完全可以接受的。
  • 树可能会经常更新和添加;辅助数据结构/表/列是可能的,但需要保持最新。如果您有任何魔法书籍可以进行此类查询,我想知道。

非常感谢。

0 投票
4 回答
4763 浏览

delphi - Delphi 文件夹扫描器 - Unicode 文件夹名称

哟。

我需要扫描一个目录及其子文件夹,我使用了 FindFirst 和 FindNext 程序,但是 TSearchRec 的 Name 属性是一个字符串,因此 unicode 文件夹名称(希伯来语、阿拉伯语等)是 '?????' 在名称属性中。

我尝试使用带有 WideFindFirst、WideFindNext 和 TSearchRecW 的 TntComponent。但我还是得到了??????用于文件夹名称。

0 投票
3 回答
169 浏览

language-agnostic - 用户输入的递归——优雅还是奇怪?

Dev-cpp 附带一个示例程序 Jackpot,其中有一个 GetResults 函数:

这是一种反复询问用户输入的优雅方式吗?do-while当然,它比用循环环绕大约 20 行更具可读性。我倾向于喜欢它,但我不经常看到这样的东西,所以我不确定。你怎么看?

编辑: 在你的例子中,递归深度被生命的数量所阻止,所以这看起来不错,因为它不会大于 1000 甚至 100 - 这正是我考虑它的原因,但现在我可以看到它是相当愚蠢的想法:)我想知道谁把它放在一个示例程序中......

感谢您的输入!

0 投票
7 回答
2160 浏览

recursion - 易递归算法的迭代版本

我想我有一个很简单的问题。我有这个问题,可以用递归函数很容易地解决,但我无法迭代地解决。

假设您有任何布尔矩阵,例如:

男:

我知道这不是一个普通的布尔矩阵,但它对我的示例很有用。你可以注意到那里有某种零路径......

我想创建一个函数来接收这个矩阵和一个存储零的点,并将同一区域中的每个零转换为 2(假设矩阵可以存储任何整数,即使它最初是布尔值)

(就像在 Paint 或任何图像编辑器中绘制区域时一样)

假设我用这个矩阵 M 和右上角零坐标调用函数,结果将是:

好吧,我的问题是如何迭代地做到这一点......希望我没有把它搞砸太多

提前致谢!

曼努埃尔

ps:如果您能用 C、S、python 或伪代码显示该函数,我将不胜感激:D

0 投票
4 回答
3143 浏览

vb.net - 在 ASP.NET 中显示异常消息的递归方式

我已经开始大量使用异常,我相信我会从它中成长,因为我会通过艰苦的方式学习优缺点,但是在我成为异常大师之前,我想知道这种技术是否是可以接受的。

我打算在我自己的“SorryFailedToSaveYourData”异常中包装一个数据库异常,然后递归地移动显示消息的异常,有点像这样:

这种做法有用吗,还是在处理异常时我完全错过了这条船?我知道您可以创建自己的例外,但对于我们正在从事的项目的规模来说,这似乎有点矫枉过正。

谢谢

0 投票
9 回答
3570 浏览

c - 将指针传递给C中的递归函数

我刚开始学习C的道路上,遇到了一些困难:

下面列出的代码给了我以下错误:

附加到程序:`/workfolder/cocoa/c_stuff/bookshelf/build/Debug/bookshelf',进程
1674。
无法访问地址 0xa0df194 的内存 无法访问地址 0xa0df194 的内存

代码编译正确,函数第一次运行良好(所有问题都被问到,结构接收数据);但是当用户键入“y”来添加另一本书时,就会发生内存错误。

发生错误的任何想法?

提前致谢!

0 投票
4 回答
4120 浏览

java - 我该如何弄清楚这个复杂的递归算法?

我刚开始学习用 Java 教授的数据结构和算法。到目前为止,我一生中只学过 C++,所以我对使用 java 还是很陌生。

无论如何,我有一个家庭作业问题,我有点坚持:

编写一个递归方法,返回 N 的二进制表示中 1 的数量。如果 N 为奇数,则使用它等于 N/2 + 1 表示中 1 的数量这一事实。

现在我不确定该怎么做。我已经设置了一个函数,它接受一个整数并将其转换为二进制并将其存储在一个字符串中,但其余的我有点迷失了。

如果我能得到一些指导,那真的很有帮助。

这是我到目前为止所拥有的:

谢谢