问题标签 [non-recursive]

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 投票
2 回答
423 浏览

c++ - 递归排列、Ellis Horowitz 算法和数据结构混淆。

我是大学第一年的初学者程序员。我的导师要求我们对递归算法进行一些研究,并使其不递归。不管我尝试了多少,这似乎是不可能的。问题是

A 是一个字符串(例如 A = "hello"),作为抽象的交换,将第 k 个字符与 A 的第 i 个字符交换,例如 CALL 交换("hello", 2, 3) 将更改为 "你好”到“hlelo”)。

这个想法是打印出所有可能的排列 C++ 中的版本读取

我的导师更喜欢使用一种叫做 ADL 的语言,这种语言似乎只出现在 Horowitz 的《算法和数据结构》一书中。他在 ADL 中提出了这个问题,所以我也会添加该代码,它很容易理解。

感谢任何可以提供帮助的人。马丁

0 投票
1 回答
288 浏览

c++ - 没有递归的排列?

我试图使用 for 循环来替换我通常使用的递归,但我发现它比我想象的要难。谁能告诉我该怎么做?谢谢!

例如,给定一个 2、1、3 的向量。应该有六个排列:

向量如下...

编辑:将顺序从 1 2 3 更改为随机顺序 2 1 3

0 投票
1 回答
342 浏览

delphi - 有没有办法使用计时器来打破delphi中的非递归代码

我正在 Delphi 中制作一个程序来检查 url 以查看它们是否已启动。问题是此操作在某些网站上可能需要一些时间。我希望它在大约 10 秒后放弃。我的问题是有没有办法在一段时间后停止检查并继续检查列表中的下一个项目?

更新抱歉没有放代码。仍在试图确定需要多少代码而不是问题。

所以它正在做 http.Head(url);

我如何告诉它在 10 秒后停止尝试

0 投票
1 回答
723 浏览

c - 从十进制转换为非十进制并打印(无字符串、数组和递归)

需要帮助了解如何将十进制数转换为非十进制形式(任何,由用户输入给出)并打印它。限制是不允许使用数组和字符串,虽然我为此编写了一个递归函数,但我正在为同一件事考虑一种非递归方法。

更多的是个人挑战/锻炼,而不是任何重要/严肃的事情,所以请随时告诉我该把自己推到哪里。

注意:我正在为这个练习使用 C 语言。

0 投票
4 回答
2331 浏览

java - 巨大矩阵Java的行列式

我正在用 Java 制作一个项目,我必须使用 BigInteger 类来实现加密方法。

我有 nxn 方阵,其中 n 可以是 200,我需要计算行列式。我使用子矩阵的行列式做了这个方法,但它需要永远计算。

有没有一种非递归的方法来计算行列式?

提前致谢。

0 投票
1 回答
541 浏览

copy - Solaris 将文件从多个目录复制到单个目录

我需要定期将一组特定源子目录(其中的 100 个)中的文件复制到“平面”目录结构中,即我希望将多个源目录中的所有文件放在一个目标目录中。我不能似乎找到了一种复制方式,可以查看源子目录并复制不会在目标目录中重新创建子目录文件夹结构的文件。

任何帮助表示赞赏。

0 投票
13 回答
73851 浏览

algorithm - 如何使用非递归方法实现图的深度优先搜索

我在这个问题上花了很多时间。但是,我只能为树找到具有非递归方法的解决方案:树的非递归方法,或图的递归方法,图的递归方法

许多教程(我在这里不提供这些链接)也没有提供方法。或者教程完全不正确。请帮我。

更新:

真的很难形容:

如果我有一个无向图:

1-- 2-- 3 --1是一个循环。

在这一步:'将弹出顶点的邻居推入堆栈',顶点应该被推入的顺序是什么?

如果压入顺序为2, 4, 3, 则栈中的顶点为:

弹出节点后,我们得到结果:1 -> 3 -> 4 -> 2而不是1--> 3 --> 2 -->4.

这是不正确的。我应该添加什么条件来停止这种情况?

0 投票
3 回答
18370 浏览

algorithm - 洪水填充算法的非递归实现?

我正在使用 Java 开发一个小型绘图应用程序。我正在尝试通过实现洪水填充算法来创建一个“桶填充”工具。

我尝试使用递归实现,但它有问题。无论如何,我在网上搜索,似乎为此目的,建议使用该算法的非递归实现。

所以我问你:

您能描述一下 Flood Fill 算法的非递归实现吗?欢迎提供实际的代码示例、一些伪代码,甚至是一般性的解释。

我正在寻找您能想到的最简单最有效的实现。

(不必是特定于 Java 的)。

谢谢

0 投票
1 回答
589 浏览

java - 二叉搜索树的非递归遍历以更新大小

如果有人问过这个问题,请原谅我,但我在搜索时找不到它。所有的搜索结果都是关于遍历二叉树的,就好像一个人正在搜索一个特定的节点一样——因此它最终会下降左或右等等。

但是遍历更新树的大小呢?就像你在底部添加了一个新节点一样,你必须更新每个节点的大小以反映新的树大小。

假设这是原始树并添加 Z:

所以要更新大小,除非我想错了,否则你必须先更新下面的节点,然后才能更新它上面的节点。正确的?(要更新 D,您必须先更新 S 和 A)

那么,您将如何从根遍历到底部但从底部向上更新?

0 投票
1 回答
511 浏览

parsing - 如何编写*可中断*递归(?)下降解析器

我有一个非常标准的递归下降解析器。该算法很简单:每个函数从 a 中读取字符,stream然后返回FAIL或调用后续解析函数(由相应的语法规则指定):

我想解决我stream一次没有完整的情况 - 我异步获取它的部分。因此,我需要的是“可中断性”的特性——我必须能够保存解析器的状态,然后从那时起继续。

遗憾的是,这是嵌套函数调用不可能做到的一件事,因为解析器的所有状态都“存储”在调用堆栈中(按照函数的顺序和它们的局部变量)。

所以我必须以parse*不同的方式构造函数。

我使用的语言是JavaScript

有人可以指出我如何进行的任何想法吗?

编辑:

  • 我似乎很清楚我需要某种状态机。我无法围绕生成器或延续传递风格,在我看来,在保存状态和恢复时有很多小故障。对我来说,我能想到的最清晰的途径是将嵌套调用转换为某种堆栈,将局部变量重写为存储在堆栈项中的一些哈希图,并以不同的线性方式构造解析代码,这样我就可以轻松地“转到“到某个状态。

  • 我看到的子问题之一可能是:由于我没有完整的stream,我认为我必须尝试多个路径并存储所有部分解析的尝试。例如,如果语法说a = b | cthenb可能太长以至于它没有完全在stream. 所以我不能在解析中“挂起” b,我必须同时尝试并保存部分计算。我对吗?