help reescritura en estilo funcional

Estoy aprendiendo Scala como mi primer lenguaje funcional. Como uno de los problemas, estaba tratando de encontrar una forma funcional de generar la secuencia S hasta n lugares. S se define de modo que S (1) = 1 y S (x) = el número de veces que x aparece en la secuencia. (No recuerdo cómo se llama esto, pero lo he visto en los libros de programación antes).

En la práctica, la secuencia se ve así:

  S = 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 ...

Puedo generar esta secuencia con bastante facilidad en Scala usando un estilo imperativo como este:

  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
  }

Pero realmente no tengo idea de cómo escribir esto sin usarvars y el bucle while.

¡Gracias

Respuestas a la pregunta(5)

Su respuesta a la pregunta