[MÚSICA] [MÚSICA] Olá a todos. Este é o curso de Desenvolvimento Ágil com Padrões de Projeto. Eu sou Eduardo Guerra. Hoje na aula vamos falar sobre Composição Recursiva. O que é isto? Quando a gente aprende a programar, a gente aprende o que é recursividade. Então nesta aula a gente vai fazer uma pequena lembrança, uma recordação do que é recursividade e depois vamos falar o que é composição recursiva. Então uma piada comum na área da computação é falar assim: recursão. Vê recursivo. Recursivo, se você ainda não entendeu, vê recursão. Justamente para brincar com o fato da recursão ser uma coisa que chama ela mesma. Então o fato de a definição de recursão incluir a definição de recursão, recria aí o conceito de recursivo. Então no caso, por exemplo, uma função, quando a definição do que ela faz inclui ela mesma, a gente diz que ela é uma função recursiva. Vamos dar uma olhadinha aí. Vamos dar uma recordada. Então a gente tem aqui a função recursiva esta daí, no caso, o que ela faz? Ela recebe número, certo, e imprime este número, e aí ele chama enquanto este número for menor do que três ele chama a mesma função com aquele número mais. Então a gente pode ir vendo como que vão sendo feitas as chamadas. Se eu chamar, por exemplo, esta função recursiva com o zero, ele vai imprimir o zero e vai chamar ela com o um; depois vai imprimir o vai chamar ela com dois; depois vai imprimir o dois e vai chamar ela com três; vai imprimir o três e aí ele não vai chamar novamente. Porque uma das coisas importantes das soluções recursivas é justamente este critério de parada. Ou seja, quando que esta função para? Bom, se a gente mudar pouquinho a ordem olha como é que já fica diferente. Então para eu colocar para imprimir depois de chamar, ele vai fazer o que? Ele vai primeiro chamar a função, eu chamo ela com zero, primeiro chamar com aí dentro dessa vai chamar com o dois, dentro da com dois chamar com três, aí sim ele vai imprimir, e aí ele volta, ele retorna e volta, imprime no dois, no e o zero. Então para você ver, só de alterar esta ordem a gente já fez uma função. Imprimia de zero até três, ela imprimia de três até zero. Para entender pouquinho como que esta questão da recursividade funciona. Mas aí o que a gente falou no começo aqui da aula, era que a gente ia falar o que era uma composição recursiva. O que é isto? Como que é isto? No caso a composição recursiva, a gente fala uma função recursiva é quando a própria função ela é utilizada na sua definição. Então a composição recursiva é quando a gente define uma estrutura que é composta por ela mesma. Ou seja, quando a estrutura faz parte da própria definição. Então exemplo deste tipo de estrutura que é recursiva é a lista ligada. Por quê? Porque quando eu estou falando na lista ligada, elemento, ele é ligado a outro elemento. Então de uma certa forma a definição de elemento está sendo utilizada para definir elemento. Isto faz com que esta estrutura seja recursiva. Vamos dar uma olhada no código como seria e acho que fica pouco mais claro. Então, por exemplo, a classe Elemento, ela guarda valor e ela tem ali atributo que guarda o próximo elemento. Ou seja, o próprio elemento, ele faz parte ali desta definição. E aí para a gente ver, quando a gente utiliza uma estrutura recursiva, acaba que as próprias funções, os próprios métodos desta classe utilizam a recursividade. Só que o que ele vai fazer? Ele às vezes vai chamar a mesma função neste elemento que está compondo. Então vamos ver como exemplo, por exemplo, se eu quiser contar a quantidade de elementos da minha lista ligada, eu vejo: olha, se o meu próximo for nulo, então eu tenho só. Agora, se o próximo não for nulo a minha contagem é igual a mais a contagem do próximo. Aí eu vou fazendo assim. Quando chegar lá no último, que é o que vai ter o final nulo, ele vai me retornando e eu vou contar quantos elementos tem na minha linha, certo? Então, os algoritmos recursivos acabam sendo utilizados para trabalhar com as estruturas recursivas para poder, por exemplo, percorrer ela naturalmente. Bom, mas o que isto tem a ver com padrões, né? Por enquanto vou parar nesta aula. Espero que vocês tenham entendido o que é composição recursiva e na próxima aula eu vou mostrar como botar pouquinho de polimorfismo neste meio pode deixar as coisas mais interessantes. Muito obrigado e até a próxima aula. [MÚSICA]