目标是编写一个为某个值生成格雷码的函数。
目前我有这个:
def gray(i: Int): List[String] = {
if(i == 0) List("")
else {
val l = gray(i - 1)
(l map {"0" + _}) ::: (l map{"1" + _})
}
}
输出gray(3)
:List(000, 001, 010, 011, 100, 101, 110, 111)
然后我尝试List
用 for 循环来构造它。设想 :
因为n = 2
,我将拥有:
def gray(i: Int): List[String] = {
(for{a <- 0 to 1
b <- 0 to 1} yield a+""+b).toList
}
因为n = 3
,我将拥有:
def gray(i: Int): List[String] = {
(for{a <- 0 to 1
b <- 0 to 1
c <- 0 to 1} yield a+""+b+""+c).toList
}
显然这没有考虑i
,所以我想知道我们是否可以构建这样一个函数,使用i
.
通过构造我的意思是:
if ,为循环i == 2
创建变量并产生它们,如果然后创建并产生它们,等等。2
i == 3
3
有可能吗?(我是 Scala 的初学者)