MyLeoNes™

Recursão — Informática, 11–13

A recursão resolve um problema grande aplicando a mesma regra a uma versão mais pequena, até chegar a um ponto simples de paragem.

Uma regra que se chama a si própria

Na recursão, uma instrução trata de uma parte e depois pede à mesma instrução que trate de uma parte mais pequena. Também tem de saber quando parar: esse é o caso-base. O desenho de um ramo mostra a ideia: cada ramo divide-se em ramos menores, mas o galho mais pequeno já não se divide.

Por que usar recursão?

Algumas coisas são feitas de cópias mais pequenas do mesmo tipo: pastas contêm pastas, árvores genealógicas dividem-se em ramos e mapas contêm regiões dentro de regiões. Uma lista longa de instruções separadas seria difícil de escrever e alterar. A recursão nasceu do problema de descrever estas estruturas encaixadas com uma só regra clara, em vez de repetir código semelhante.

Fazer uma contagem decrescente

Usa uma regra chamada conta(n): se n for 0, para; caso contrário, escreve n e chama conta(n−1). Começa com conta(3). Escreve 3, depois chama conta(2), que escreve 2 e chama conta(1). Esta escreve 1 e chama conta(0); o caso-base para tudo, por isso o resultado final é 3, 2, 1.

Esquecer a paragem

Uma regra recursiva pode parecer elegante, por isso é tentador deixá-la chamar-se sem verificar um caso-base. É um erro compreensível: as tarefas mais pequenas parecem acabar por desaparecer. Sem uma paragem, porém, o valor pode nunca chegar ao fim, e o computador continua a criar chamadas inacabadas até ficar sem espaço ou indicar um erro.

Pastas e formas ramificadas

Os exploradores de ficheiros podem procurar numa pasta e depois em cada pasta dentro dela, mesmo que estejam muito encaixadas. Os programas de desenho também usam recursão para plantas ramificadas, formas parecidas com flocos de neve e caminhos de labirintos. Não precisas de recursão para todas as acções repetidas; é mais útil quando cada parte contém partes menores com a mesma estrutura.

Continua a explorar

Outras línguas

A carregar o MyLeoNes™…