我一直在为一个类的Java项目工作.它是链表的实现(此处称为AddressList包含调用的简单节点ListNode).问题在于,所有事情都必须通过递归算法来完成.我能做的一切都很好,没有一种方法:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
Run Code Online (Sandbox Code Playgroud)
现在我的reverse函数只调用一个辅助函数,该函数接受一个允许递归的参数.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Run Code Online (Sandbox Code Playgroud)
我的助手功能有签名private ListNode reverse(ListNode current).
目前,我使用堆栈迭代地工作,但这不是规范要求的.我在C中找到了一个递归反转的算法,并手工将其转换为Java代码,但是它有效,但我对此并不了解.
编辑:没关系,我在此期间弄清楚了.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Run Code Online (Sandbox Code Playgroud)
虽然我在这里,有没有人看到这条路线有任何问题?
说到处recursion都使用for循环是否正确?如果递归通常较慢,那么将其用于循环迭代的技术原因是什么?
如果始终可以将递归转换为for循环,那么可以采用经验法则吗?
我正在编写一个脚本来递归遍历主文件夹中的子文件夹并构建一个特定文件类型的列表.我遇到了脚本问题.目前设定如下
for root, subFolder, files in os.walk(PATH):
for item in files:
if item.endswith(".txt") :
fileNamePath = str(os.path.join(root,subFolder,item))
Run Code Online (Sandbox Code Playgroud)
问题是subFolder变量正在拉入子文件夹列表而不是ITEM文件所在的文件夹.我想在之前为子文件夹运行for循环并加入路径的第一部分,但我想我会仔细检查以确定是否有人在此之前有任何建议.谢谢你的帮助!
在Ruby中获取目录数组(不包括文件)的最快,最优化,单行方式是什么?
包含文件怎么样?
通过阅读这篇经典论文,我坚持认为是paramorphisms.不幸的是,该部分非常薄,维基百科页面没有说什么.
我的Haskell翻译是:
para :: (a -> [a] -> b -> b) -> b -> [a] -> b
para f base = h
where
h [] = base
h (x:xs) = f x xs (h xs)
Run Code Online (Sandbox Code Playgroud)
但我不认为 - 我对类型签名或期望的结果没有任何直觉.
什么是paramorphism,什么是行动中的一些有用的例子?
是的,我已经看过这些 问题了,但是它们并没有直接涵盖paramorphisms,只指向可能有用作为参考的资源,而不是学习资料.
recursion haskell functional-programming higher-order-functions
在SQL Server中执行递归自联接的最简单方法是什么?我有这样一张桌子:
PersonID | Initials | ParentID
1 CJ NULL
2 EB 1
3 MB 1
4 SW 2
5 YT NULL
6 IS 5
Run Code Online (Sandbox Code Playgroud)
而且我希望能够获得仅与特定人员开始的层次结构相关的记录.所以,如果我通过PersonID = 1请求CJ的层次结构,我会得到:
PersonID | Initials | ParentID
1 CJ NULL
2 EB 1
3 MB 1
4 SW 2
Run Code Online (Sandbox Code Playgroud)
对于EB,我会得到:
PersonID | Initials | ParentID
2 EB 1
4 SW 2
Run Code Online (Sandbox Code Playgroud)
我有点卡住这个可以想不出怎么做除了基于一堆连接的固定深度响应.这会发生,因为我们不会有很多级别,但我想做得恰到好处.
谢谢!克里斯.
为什么F#中的函数和Ocaml(可能还有其他语言)默认不是递归的?
换句话说,为什么语言设计者决定明确地让你输入如下rec声明是一个好主意:
let rec foo ... = ...
Run Code Online (Sandbox Code Playgroud)
并且默认情况下不提供函数递归功能?为什么需要显式rec构造?
我想覆盖对类中一个变量的访问,但是通常会返回所有其他变量.我如何实现这一目标__getattribute__?
我尝试了以下(这也应该说明我正在尝试做什么),但我得到一个递归错误:
class D(object):
def __init__(self):
self.test=20
self.test2=21
def __getattribute__(self,name):
if name=='test':
return 0.
else:
return self.__dict__[name]
>>> print D().test
0.0
>>> print D().test2
...
RuntimeError: maximum recursion depth exceeded in cmp
Run Code Online (Sandbox Code Playgroud) 我想渲染一棵深度不确定的树(儿童的孩子等).我需要递归地遍历数组; 我怎么能在Twig中这样做?
我可以在变量中创建一个递归函数,如下所示:
/* Count down to 0 recursively.
*/
var functionHolder = function (counter) {
output(counter);
if (counter > 0) {
functionHolder(counter-1);
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,functionHolder(3);就输出了3 2 1 0.假设我做了以下事情:
var copyFunction = functionHolder;
Run Code Online (Sandbox Code Playgroud)
copyFunction(3);输出3 2 1 0如上.如果我改变functionHolder如下:
functionHolder = function(whatever) {
output("Stop counting!");
Run Code Online (Sandbox Code Playgroud)
然后functionHolder(3);会Stop counting!按预期给出.
copyFunction(3);现在给3 Stop counting!它指的是functionHolder,不是函数(它本身指向).在某些情况下这可能是理想的,但是有没有办法编写函数以便它调用自身而不是保存它的变量?
也就是说,是否可以仅更改线路,functionHolder(counter-1);以便3 2 1 0在我们呼叫时仍然通过所有这些步骤copyFunction(3);?我尝试了,this(counter-1);但这给了我错误this is …