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?
7
Respostas:
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:
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:
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 .
fonte
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) é calcularn ! .
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.
fonte
As sugestões de Shaull são boas. É importante ter em mente e lembrar continuamente os alunos de que a ideia subjacente é:
Isso funciona bem para problemas numéricos, como computaçãon ! (onde o menor problema envolve computação ( n - 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.
fonte
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.
fonte