问题标签 [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.
c - 如何将此递归函数转换为迭代版本?
此代码基本上计算 nCr 以打印帕斯卡三角形。
这个函数如何变成迭代版本?
我之前忘了提到这一点,但解决方案必须不使用lists,以某种方式将这个精确的递归逻辑转换为迭代逻辑。
java - 如何将外部递归程序转换为非递归形式(使用堆栈而不是 CPS)?
关于如何将递归转换为非递归有很多问题,我也可以将一些递归程序转换为非递归形式注意:我使用一种通用的方式(用户定义的堆栈),因为我认为它很容易理解,并且我使用 Java,所以不能使用 GOTO 关键字。
事情并不总是那么顺利,当我遇到回溯时,我被卡住了。例如,子集问题。我的代码在这里:recursive call with loop
当我使用用户定义的堆栈将其转换为非递归形式时。我不知道如何处理循环(在循环中存在递归调用)。
我google了一下发现有很多方法,比如CPS。我知道有一个子集问题的迭代模板。但我只想使用用户定义的堆栈来解决。
有人可以提供一些线索来将这种递归(循环递归)转换为非递归形式(通过使用用户定义的堆栈,而不是 CPS 等)吗?
这是我的代码递归到非递归(Inorder-Traversal),因为递归调用没有循环,所以我可以轻松做到。同样,当具有返回值的递归程序时,我可以使用引用并将其作为参数传递给函数。从代码中,我使用堆栈来模拟递归调用,并使用“状态”变量到下一个调用点(因为 java 不允许使用 GOTO)。
以下是我收集到的信息。似乎所有这些都不满足我提到的问题(有些使用 goto 不允许 java,有些是非常简单的递归意味着没有嵌套递归调用或带有循环的递归调用)。
2代码项目
----------------------------------分割线-------------- ----------------------
谢谢你们。在我发布问题之后......我花了一整夜才弄清楚。这是我的解决方案:非递归子集问题解决方案,代码的注释是我的想法。
总结一下。我之前坚持的是如何处理 foo-loop,实际上,我们可以简单地忽略它。因为我们使用的是loop+stack,所以可以对是否满足条件做一个简单的判断。
python - 河内塔非递归函数
我试图弄清楚如何在hanoi_2
下面的函数中实现河内塔问题的非递归算法,但我不知道如何继续......
它抛出一个错误:"can't pop from empty list"。当我输入一个奇数时,它会以某种方式工作,但是,当第三轮通过时,事情就出错了。当输入偶数作为盘数时,程序甚至不会启动。
怎么了?
java - 已编辑:二进制插入无法正常工作,因为我认为它应该
对 Java 来说还是新事物;我们的教授希望我们在向此 ArrayList 添加元素时使用非递归二进制搜索。我不断遇到越界异常,我就是不知道为什么。在调试和逐步进行时,我还注意到异常行为。对于我的一生,我似乎无法从逻辑上弄清楚这一点。他还希望我们也为此使用比较方法。我的问题是弄清楚为什么/如何让数组越界。任何指点和建议将不胜感激.....我们的教授年纪大了,需要几天时间才能通过电子邮件回复,我没有那么长的时间来解决这个问题。这是唯一让我无法完成剩下的任务的事情。
***编辑当我这样做时:
}
或这个:
两者都让方法运行,实际上都没有填充数组列表。我不明白为什么这不起作用,从逻辑上讲它应该填充数组不应该吗?这次它运行没有错误,但基本上什么也没做。数组大小为0,运行后没有元素,但至少现在运行。
几乎完全解决了我的问题,但现在出现了一个我无法弄清楚的新问题!!!!
我的循环初始化在别处。截至目前,我的输出是 {2, 3, 4, 5, 6, 1} 在我初始化数组列表时使用上述入队方法。我不能为我的生活得到这个来填补它。当然,我的初始化已经按顺序进行了,但是根据我们的分配,我们必须在添加到列表时使用二进制搜索方法对其进行初始化。
为什么第一个初始化的项目留在列表的末尾?(1),当所有其他值被添加到它们的正确位置时?仅仅是因为 ArrayLists 的 .add 方法添加到列表的末尾,即使它是我添加的第一个值(如果列表大小当前为 0,则使用 .add 方法)?我怎样才能解决这个问题?
我最初的解决方案是代码的注释部分,除了输出 {3, 4, 5, 6, 1, 2} 之外什么也没做,所以我更加困惑,现在我正在寻求建议。
python - How to perform a non recursive copy using python
I need to copy the files with certain patterns. I need to perform the non recursive copy on a given directory using shutil. I tried this code given below with performs recursive copy. Is there any options to specify in it to do the non recursive copy.
algorithm - n^2 或 n*lgn*lgn 哪个更有效?
可以通过非递归算法在n^2
时间上解决的问题。相同的问题可以在n lg(n)
操作中使用递归算法来解决,将输入分成两个相等的部分,并lg(n)
使用操作将两个解决方案组合在一起。你认为哪种算法更有效?
编辑:基本情况:如果 n = 1,则 T(n) = 1。
这意味着nlgn lgn
它将比 更有效n^2
。对?
recursion - 非递归深度优先搜索:
在这篇文章中,biziclop 插入了非递归深度优先搜索算法的伪代码。
如果我们想使用递归DFS 算法来检查节点的适当性,我们可以利用两种变体:前序(当一个节点在其子节点之前检查时)和后序(当子节点在其子节点之前检查时)节点),加上仅用于二叉树的第三个变体(按顺序:左子树,然后是节点,然后是右子树)。
由于我有兴趣尽可能拥有所有三个变体,因此我尝试修改 biziclop 的伪代码以获得 DFS 算法的所有三个变体。问题是,我陷入了这样一个事实,即节点在其子节点之前被添加到堆栈(并因此被检查)。任何想法?
arrays - 合并排序如何在长度为 N 的数组上工作?
我已经阅读了书籍,但遇到了我无法解决的问题。我查资料很久了。我打破了我的想法试图理解它。
因此,我得到了一个长度为 N (int) 的数组,以使用非递归合并排序算法对其进行排序。我学习了长度为 2^n 的数组的合并排序算法。但我完全不明白它对长度为 N 的数组是如何工作的。
有人可以解释一下它是如何工作的吗?
racket - 如何使用抽象列表函数在球拍中制作斐波那契数列
我正在尝试编写一个球拍程序,它在不使用递归的情况下计算斐波那契数列中前 n 项的总和,并且只使用抽象列表函数(如 map、builld-list、foldr、foldl)。我可以使用辅助功能。我被困在如何在不使用递归的情况下制作斐波那契数列。我以为我可以使用 lambda 函数:
但我不确定如何生成输入列表/如何将其添加到函数中。一旦我有了斐波那契数列,我就知道我可以使用 (foldl + (car lst) (cdr lst)) 来求和。谁能向我解释如何制作斐波那契数列/给我一个提示?
python - Python中的顺序合并排序(非递归合并)
我在 python 中使用 C# 中的类似代码编写了这段代码,但它只工作了一半。例如,某些部分已排序,但某些部分与输入相同。
我试图修复它,但它真的让我很难。这将感谢伟大的编码器使这种排序完美!