Recursão do Ensino

7

Sou assistente de professor na minha universidade e meu próximo tópico é recursão. de que maneira é melhor ensinar a recursão para que o aluno possa entender o conceito facilmente e possa pensar recursivamente?
Eu estava pensando em explicar a estrutura da pilha para ensinar recursão, mas estou preocupado que eles fiquem presos no rastreamento do processo. alguma dica?

Amém
fonte
Você está indo para a programação ou o CS (como no desenvolvimento de modelos e algoritmos)?
Raphael
Não é programação.
Amém
4
A melhor maneira de ensinar recursão é ensinar alguém a ensinar a classe para você. * rimshot *
David Richerby
Você está ensinando recursão ou está ensinando indução? Eles não são a mesma palestra.
DanielV
11
As torres de Hanói podem ser um bom exemplo para começar.
Raphael

Respostas:

7

Minha maneira favorita de ensinar recursão é por referência à fada da recursão.

Tenho certeza de que todos estamos familiarizados com a ideia de que as histórias podem ser uma maneira muito eficaz de ensinar idéias; as pessoas parecem construídas para ouvir e lembrar histórias. A fada da recursão é uma explicação sugerida por Jeff Erickson, que empresta bem a essa abordagem.

Como Jeff E. escreve:

A recursão é um tipo de redução particularmente poderoso, que pode ser descrito livremente da seguinte maneira:

  • Se a instância do problema for pequena ou simples o suficiente, basta resolvê-lo.
  • Caso contrário, reduza o problema para uma ou mais instâncias mais simples do mesmo problema.

Se a auto-referência for confusa, é útil imaginar que outra pessoa resolverá os problemas mais simples, como seria de se esperar para outros tipos de reduções. Eu gosto de chamar essa pessoa de fada da recursão. Sua única tarefa é simplificar o problema original ou resolvê-lo diretamente quando a simplificação é desnecessária ou impossível; a Fada da recursão cuidará magicamente de todos os subproblemas mais simples para você, usando métodos que não são da sua conta, mas que acabam se espalhando 1 . Leitores matematicamente sofisticados podem reconhecer a Fada da Recursão por seu nome mais formal, a Hipótese da Indução.

1 : Quando eu era estudante, costumava atribuir recursão a "elfos" em vez da fada da recursão, referindo-se à história dos Irmãos Grimm sobre um sapateiro velho que deixa seu trabalho inacabado quando vai para a cama, apenas para descobrir ao acordar que os elfos (“Wichtelmänner”) terminaram tudo da noite para o dia. Alguém mais experiente em termos entheogenicamente do que eu poderia reconhecê-los como os "elfos das máquinas autotransformadoras" de Terence McKenna.

Eu recomendo a leitura de todas as anotações das aulas sobre recursão . Eles são uma coisa de beleza e lhe darão excelentes idéias sobre como ensinar recursão.

Por exemplo, confira sua explicação sobre as Torres de Hanói, onde ele mostra como resolver o problema por recursão. Minha parte favorita:

O truque para resolver esse quebra-cabeça é pensar recursivamente. Em vez de tentar resolver todo o quebra-cabeça de uma só vez, vamos nos concentrar em mover apenas o maior disco. [...] E depois a gente muda ondisco, temos que mover aqueles n-1 1discos de volta em cima dele. Então agora tudo o que precisamos descobrir é como ...

PARE!! É isso aí! Foram realizadas! Reduzimos com sucesso on-disk Tower of Hanoi problem para duas instâncias do (n-1 1) - problema da Torre de Hanói, que podemos alegremente entregar à Fada da Recursão (ou, para levar a história original adiante, aos monges juniores do templo).


Referências à fada da recursão: um vídeo do Youtube ("A recursão é quando você precisa resolver alguma coisa, você se chama em vez de outras!" "Então, quando eu tenho um problema, eu me peço que resolva isso?" recursão, é preciso entender a recursão "). Dividir e conquistar é um exército de fadas da recursão .

DW
fonte
3

Acho que a melhor maneira de explicar a recursão não trivial é começar com funções matemáticas, que são mais "confortáveis" para alguns dos alunos. Por exemplo, os números de Fibonacci são um excelente exemplo, pois usam duas chamadas recursivas.

Outro exemplo (que pode ser dado como um exercício simples) é calcular n!.

Então, alguns exemplos mais "algorítmicos" estão em ordem, em estruturas de dados mais envolvidas. Os exemplos mais naturais aqui são percursos em árvore (pré-encomenda, ordem e pós-encomenda). Eu acho que depois desses exemplos, os alunos pegam o jeito. A partir daí, é principalmente prática.

Eu salvaria a estrutura da pilha para mais tarde, pois é mais relevante para a maneira como a recursão é realmente implementada nos computadores, o que tem menos a ver com o conceito real de recursão.

Shaull
fonte
3

As sugestões de Shaull são boas. É importante ter em mente e lembrar continuamente os alunos de que a ideia subjacente é:

Para resolver um problema: (1) lide com o (s) caso (s) base (s), onde a recursão não se aplica, e (2) resolva todo o resto, resolvendo problemas menores e combinando adequadamente as soluções menores em sua solução para o original problema.

Isso funciona bem para problemas numéricos, como computação n! (onde o menor problema envolve computação (n-1 1)!) ou computação xn usando o quadrado repetido (onde o menor problema é basicamente a computação xn/2)

A recursão e a indução andam de mãos dadas, especialmente ao provar a exatidão de um algoritmo recursivo ou ao obter estimativas de tempo para um.

A recursão é uma técnica natural para árvores, é claro, mas também não se esqueça das listas, fazendo coisas como somar recursivamente uma lista de números ou reverter uma lista. É claro que o mergesort é um candidato natural aqui e vale a pena o esforço para fazer tudo recursivamente, incluindo uma implementação recursiva de dividir uma lista em duas partes quase iguais e implementar a parte de mesclagem recursivamente.

Gosto de ressaltar que, além de ser uma ferramenta poderosa de design, vale a pena estudar a recursão, pois há problemas em que a solução não recursiva pode ser extremamente difícil de encontrar. Um bom exemplo disso são as Torres de Hanói: a solução recursiva é simples e mais ou menos transparente, enquanto uma solução não recursiva é realmente difícil de explicar e, provavelmente, ainda mais difícil de inventar.

Rick Decker
fonte
2

Ao ensinar recursão, você pode começar com funções ou com estruturas de dados .

Pelo que me lembro dos meus dias de ensino, eu costumava começar com uma estrutura de cozimento: a cebola. Expliquei que a cebola é um repolho solitário (ou um caroço) ou um oinion com um repolho ao seu redor. Depois mudei para outras estruturas, como cordas ou árvores.

Então eu tive que escrever programas para essas estruturas. E eles naturalmente se chamavam recursivamente, seguindo a definição da estrutura. O conceito de caso base também parece mais natural, e a abordagem evita ter o conceito de instâncias mais simples do problema, pelo menos a princípio.

A aplicação a outros dados, como dados numéricos, é mais natural.

babou
fonte
PS O truque da cebola também funciona com alcachofras, mas pode não ser um item alimentar tão comum.
21714
Em termos técnicos, você combinou definições indutivas e funções recursivas nelas? Essa é uma combinação muito natural (pode-se dizer obrigatória).
Raphael
@babou Pensando mais sobre isso, a alcachofra não é tão conveniente ... a menos que você ensine não-determinismo ao mesmo tempo.
21714