Генерация итератора вместо списка в рекурсии

Есть хороший вопрос, который говорит, что мы должны 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,

Другие вопросы по тегам