Генерация итератора вместо списка в рекурсии
Есть хороший вопрос, который говорит, что мы должны Stream/View или итерировать наши коллекции, чтобы сделать их по требованию. Ясно. Я просто не понимаю, что я должен применять .view
или же .iterate
в следующей демонстрации
val l1 = List("10", "00", "0")
def gen(depth: Int): Iterable[String] = if (depth == 1) l1 else {
for (sub <- gen(depth-1); item <- List(depth + sub, sub+sub, sub)) yield item
}
Должен ли я применить их к gen(depth-1)
или List(depth+..)
?
Кстати, я должен встроить l1
в (depth == 1) l1 else
? Это не используется где-либо еще. Я просто боюсь, что это создаст новый список для каждого листа.
1 ответ
Я должен был бы попробовать это, но я бы сказал, List(depth+..).view
, поскольку вы не будете использовать одни и те же значения более одного раза. Я думаю, что это даст вам своего рода обход DFS с учетом имеющейся у вас рекурсии.
И да, я бы не стал встраивать это, но жить l1
как это. Я бы даже сделал val l1 = List("10", "00", "0").view
,