Recursão: Achatar as curvas

O aninhamento de arrays pode ser visto indiretamente como curvas e barreiras dos dados reais incorporados nos arrays e, assim, frustra o próprio propósito de acessá-los diretamente por meio de índices e slices. Escreva uma função recursiva para achatar essas curvas (isto é, nivelar, passar a ferro, comprimir, arrasar, derrubar) e expor esses dados como um único array em vez de um array de arrays.

Exemplos

flatten(["Tesh", 121317, ["Love", "of", ["my", ["life", ["and", "my", ["world"], "entirely"]]]]])
➞ ["Tesh", 121317, "Love", "of", "my", "life", "and", "my", "world", "entirely"]

flatten([[[[[["direction"], [372], ["one"], [[[[[["Era"]]]], "Sruth", 3337]]], "First"]]]])
➞ ["direction", 372, "one", "Era", "Sruth", 3337, "First"]

flatten([[4666], [5394], [466], [[["Saskia", [[[[["DXTD"]], "Lexi"]]]]]]])
➞ [4666, 5394, 466, "Saskia", "DXTD", "Lexi"]

flatten([[696], ["friend"], ["power"], [[[["Marcus"]]]], ["philus"]])
➞ [696, "friend", "power", "Marcus", "philus"]

flatten([[["deep"], [[["ocean"]]], [["Marge"]], ["rase", 876]]])
➞ ["deep", "ocean", "Marge", "rase", 876]

Observações

  • Cada array tem pelo menos um elemento.
  • Espera-se que você resolva este desafio por meio de uma abordagem recursiva.
  • Você pode consultar a aba Recursos para obter mais detalhes sobre recursão em Java.
  • Uma versão semelhante deste desafio pode ser encontrada por meio deste link.
  • Uma coleção de desafios sobre recursão pode ser encontrada por meio deste link.