|
|
1
12
你一定要去看看 但稍后我将尝试发布一个更全面的答案。 更新 好的,下面是一个解决方案。它将莫里斯序列表示为int的lazylist中的lazylist,因为我假定您希望它在“两个方向”上都是懒惰的。 f lazylist(在fsharp.powerpack.dll中)有三个有用的属性:
第一个属性与Seq(IEnumerable)相同,但其他两个属性对于Lazylist是唯一的,对于计算问题(如本问题中提出的问题)非常有用。 无需进一步说明,代码:
更新2 如果你只想数数,那也没关系:
内存使用率保持不变(在我的盒子上低于16米)…还没有跑完,但我计算了第55个长度很快,即使是在我的慢盒子上,所以我认为这应该工作得很好。还要注意,我在长度上使用了“bignum”,因为我认为这将溢出一个“int”。 |
|
|
2
3
我认为这里有两个主要问题:
在计算第50个子序列的长度时,下面的代码比您的实现快80倍以上,但对于您来说,这可能还不够懒:
这个功能的核心是折叠
|
|
|
3
0
只需保存您查找的上一个元素。
|
|
|
Luiz Miranda · 尾递归pow-Erlang 8 年前 |
|
|
Srinivas · Scala中的尾部递归 8 年前 |
|
|
madtyn · Python:有可能使这个尾部递归阶乘更快吗? 8 年前 |
|
|
clay · Scala中的尾部递归findNextAndTail 8 年前 |
|
|
Sanitiy · 如何在调用另一个函数后强制函数退出? 8 年前 |
|
|
Lorinc Nyitrai · Lua-将协程递归重写为尾部调用递归 8 年前 |
|
|
Alex · 尾部递归调用(C primer加上书本示例) 10 年前 |
|
|
Thomas Ahle · 递归联合查找是否可以优化? 10 年前 |
|
|
beta Rob · 这个函数真的是尾部递归的吗? 13 年前 |