- Descubra o que é tail recursion (recursão na cauda), diga o que o compilador pode
fazer quando ela existe, e o que acontece com uma função que é recursiva mas não tail-recursive.
- Faça as versões listadas abaixo para as seguintes funções que fizemos em sala: insere, recupera,
remove:
- Iterativa, usando vetores para representar as listas
- Iterativa, usando ponteiros
- Recursiva, usando vetores
- Recursiva, usando ponteiros
No entanto:
- As funções de inserção devem fazê-lo em em uma dada posição (um índice será passado como parâmetro)
- As funções de remover e procurar devem receber a chave, retornando o objeto
- Faça programas que testem as funções. Por exemplo, um programa que insere vários itens
(em diversas posições), remova alguns, e depois procure mais alguns.
- Escolha quatro funções que você implementou no item anterior, e mostre um diagrama do programa
em execução, mostrando a pilha e o heap. (Não leve em consideração as otimizações do compilador,
que você aprendeu quando fez o primeiro item deste exercício).