Recursão: primeiro índice de recorrência

Crie uma função recursiva que identifique o primeiro item que tenha se repetido no argumento de string fornecido. Ela retorna o item identificado com o índice em que apareceu pela primeira vez e o índice seguinte em que reapareceu — tudo como um objeto; ou um objeto vazio se o argumento fornecido for null, undefined, uma string vazia ou não existir nenhum item repetido.

Exemplos

recurIndex("KDXTDATTDD") ➞ {"D": [1, 4]}
// D first appeared at index 1, resurfaced at index 4
//  though D resurfaced yet again at index 8, it's no longer significant
// T appeared and resurfaced at indices 3 and 6 but D completed the cycle first

recurIndex("AKEDCBERSD") ➞ {"E": [2, 6]}

recurIndex("DXKETRETXD") ➞ {"E": [3, 6]}

recurIndex("ABCKPEPGBC") ➞ {"P": [4, 6]}

recurIndex("ABCDEFGHIJ") ➞ {}

recurIndex(undefined) ➞ {}

Observações

  • Espera-se que os participantes do desafio encontrem uma solução usando o conceito de recursão ou a chamada abordagem recursiva.
  • Você pode ler mais sobre recursão (consulte a aba Resources) se ainda não estiver familiarizado com ela, se ainda não tiver compreendido totalmente o conceito antes de realizar este desafio ou se precisar de mais informações.
  • Não haverá exceções para tratar; todas as entradas são strings e objetos semelhantes a strings. Você só precisa ter cuidado extra com entradas null, undefined e string vazia para evitar um Uncaught RangeError ou exceder o tamanho máximo de chamadas da pilha.
  • Uma versão não recursiva deste desafio pode ser encontrada aqui.
  • Se você acha que recursão é divertida, pode encontrar aqui uma coleção desses desafios.