DEV Community

Pedro Dias
Pedro Dias

Posted on

Recursividade em JS/TS

Mas o que é recursividade ?

De acordo com o Wikipedia, recursividade nada mais é do que:

Um termo geralmente usado para descrever o processo de repetição de um objeto de um jeito similar ao que já fora mostrado. Um bom exemplo disso são as imagens repetidas que aparecem quando dois espelhos são apontados um para o outro.

Mas e em JS/TS?

Recursividade em JS/TS nada mais são do que funções ou tipagens que se repetem até a instruçāo terminar, podendo estar presente em funções, nas chamadas funções recursivas, e em tipagens.

Exemplo

Suponhamos que temos um Array de Arquivos(File) e Pastas(Folder), e precisamos mostrar um console.log() com o nome de cada um:

Primeira coisa que precisamos é um criar uma Tipagem para o que iremos receber em nossa função recursiva:

type Item = {
  id: string
  name: string
  // Se tem Children é um Folder, se não é um File.
  children?: Item[]
}
Enter fullscreen mode Exit fullscreen mode

Como você pode ver, utilizamos a recursivdade pois setamos o tipo para children como Item[], ou seja, criando uma recursividade, um encadeamento.

E para nossa função teremos algo desse tipo:

const showFileAndFolders = (items: Item[]) => {
  // Percorrer todos os items.
  items.forEach(item => {

    // Se tem Children é um Folder, se não é um File.
    if (item.children) {
      // Sendo um folder mostro o nome e chamo novamente a função para contemplar o `children`
      console.log('Folder: ', item.name)

      // Recursividade, chamamos a função dentro dela mesma.
      showFileAndFolders(item.children)

      return;
    } else {
      // Sendo um file mostro o nome
      console.log('File: ', item.name)
      return; 
    }
  })
}
Enter fullscreen mode Exit fullscreen mode

Outros exemplos

Utilidades famosas da recursividade também podem ser encontradas em casos como:

Sequência de Fibonacci

const generateFibonacci = (num: number) => {
  if (num <= 1) return n;
  return generateFibonacci(num - 1) + generateFibonacci(num - 2);
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)