Métodos de Ordenação e Árvores Binárias AVL em C
1 Recursividade
Em ciência da computação, a recursividade é a capacidade de uma sub-rotina chamar a si mesma. A principal vantagem desta prática é a otimização do código através da possibilidade de criação de sub-rotinas finitas para análise, definição ou produção de sentenças potencialmente infinitas. Utilizando-se como exemplo o cálculo do fatorial de um número.
A condição de parada é a parte mais importante da recursão, uma vez que caso esta não seja bem elaborada, a sub-rotina entra em estado de looping infinito.
1.1 Conclusão
Utilizar-se da recursividade traz como principal vantagem a facilidade de leitura do código, além de facilitar o desenvolvimento de sub-rotinas que necessitem muitas iterações (tais como alguns dos métodos de ordenação e listagem de diretórios). No entanto, nem sempre utilizar-se da recursão é a melhor opção pelo fato de complicar o desenvolvimento de sub-rotinas mais simples, que poderiam ser desenvolvidas mais rapidamente caso não fosse utilizada essa técnica.
2 Análise de complexidade de algoritmos
A complexidade de um algoritmo é basicamente a quantidade de trabalho necessária para sua execução, analisada através de operações matemáticas, estruturas de repetição e também o volume de dados processados. Os algoritmos seguem dois tipos de complexidade: espacial e temporal, onde a primeira trata-se da quantidade de recursos exigidos para resolução do problema e a segunda trata do montante de tempo utilizado para o mesmo fim. Seja qual for o tipo da complexidade, ela é medida de acordo com o fluxo de dados de entrada (n).
Existem três perspectivas na análise da complexidade: melhor caso, caso médio e pior caso, onde as três são calculadas em função de n. O melhor caso, representado pela letra grega Ômega, tem como resultado o menor tempo de execução do algoritmo com base no fluxo de dados de input. A utilização do melhor caso é rara por se tratar de uma abordagem muito otimista e ter pouca aplicação prática. O caso