实际上,该序列如下所示:
S = 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 ...
使用命令式编程风格,我可以很容易地在Scala中生成这个序列:
def genSequence(numItems: Int) = {
require(numItems > 0, "numItems must be >= 1")
var list: List[Int] = List(1)
var seq_no = 2
var no = 2
var no_nos = 0
var num_made = 1
while(num_made < numItems) {
if(no_nos < seq_no) {
list = list :+ no
no_nos += 1
num_made += 1
} else if(no % 2 == 0) {
no += 1
no_nos = 0
} else {
no += 1
seq_no += 1
no_nos = 0
}
}
list
}
但是我不太清楚如何在不使用vars
和while循环的情况下编写此代码。
谢谢!
Stream.continually(x).take(S(x)).toList
。编写一个递归函数,并将其作为定义的一部分 - 我只是不太了解Scala,无法告诉你它应该是什么。 - erisco1, 0, 0, 0, ...
也符合你的条件。 - Jus12