- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试完成 Hofstadter-Conway $10,000 sequence Scala 中的任务 Rosetta Code .我想尽可能地使用惯用的 Scala,但是我在不使用原始递归的情况下实现算法时遇到了麻烦,通常人们只会将其用作最后的手段。这是我目前拥有的:
object HofstadterConway {
def makeHCSequence(max: Int): Seq[Int] = {
def hc(v: Vector[Int], idx: Int): Vector[Int] = {
if (idx == (max + 1)) {
v.tail
} else if (idx <= 2) {
hc(v :+ 1, idx + 1)
} else {
hc (v :+ (v(v(idx - 1)) + v(idx - v(idx - 1))), idx + 1)
}
}
hc(Vector(), 0)
}
}
有没有办法更地道地做到这一点?
最佳答案
我本来打算早点发布这个,但我没有足够的信誉在 8 小时内发布我自己的问题的答案,所以我不得不等待。正如@axel22 指出的那样,这是我昨晚在 Rosetta Code 网站上发布的解决方案的一部分。
def makeHCSequence(max: Int): Seq[Int] =
(0 to max - 1).foldLeft (Vector[Int]()) { (v, idx) =>
if (idx <= 1) v :+ 1 else v :+ (v(v(idx - 1) - 1) + v(idx - v(idx - 1)))
}
我的问题是出于某种原因,我的思绪在尝试使用 Vector.range 或 Vector.iterate 提出解决方案时停滞不前,我没有想到 foldleft 的明显选择。
关于algorithm - 在没有原始递归的情况下实现 Hofstadter-Conway 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702263/
我正在尝试实现 Hofstadter's Q Sequence使用递归定义: Q(1) = 1 Q(2) = 1 Q(n) = Q(n - Q(n-2)) + Q(n - Q(n-1)) for n
我必须编写一个 C 函数,使用递归在屏幕上打印 Hofstadter Q 序列的前 N 个元素。 Hofstadter Q序列定义为: Q(1)=Q(2)=2 Q(n)= Q(n-Q(n-1))
我正在尝试完成 Hofstadter-Conway $10,000 sequence Scala 中的任务 Rosetta Code .我想尽可能地使用惯用的 Scala,但是我在不使用原始递归的情况
我是一名优秀的程序员,十分优秀!