Por mais que isso possa parecer um passatempo, de um programador sem ter muito o que fazer, resolvi fazer mais um comparativo entre linguagens de programação, levando em conta, desta vez, quantas execuções recursivas, cada uma executaria antes de termos o famoso Stack Overflow, ou estouro de pilha.
A justificativa desse comparativo vem do desenvolvimento do Anatro Livre, que entre suas as suas funções deve rotular uma imagem, esta função como foi dito no link, nada mais é que um função recursiva, que percorre a imagem procurando por um pixel preto e a partir deste, vai achando os vizinhos também pretos recursivamente.
Em umas das primeira implementações, usando Java, imagens grandes (2000×2000) não conseguiam ser executadas retornando um estouro de pilha, eis que resolvi, como um projeto a parte, testar quantas execuções são possíveis de se realizar com uma função recursiva simples, em cada linguagem de programação, até gerar um estouro de pilha.
Primeiro com uma algorítmo extremamente simples:
int funcao teste(int n){
escreve(n)
teste(n+1)}
teste(0)
Consegui alguns resultados parciais:
| Linguagem | Execuções |
| Haskell | Infinito |
| Perl | 2210218 |
| C++ (gcc) | 524073 |
| Pascal (tzim) | 199736 |
| C#,J#,VB.Net(VS2003) | 43034 |
| Java | 10281 |
| Bash | 7472 |
| C++(VS2003) | 4776 |
| Pascal (tp) | 3966 |
| Python | 999 |
| C++ (Visual C++) | 563 |
Talvez algum dia desses eu perca algum tempo procurando as razões de cada um desses resultados, mas o que me agradou muito foi o Haskell que por mais tempo que eu deixasse rodando o programa, não houve aumento de consumo de memória.
Estou programando para, talvez não todas essa linguagens, fazer testes mais complexos, com estruturas mais complexas. Mas isso fica pra depois das provas!
Uptdate : Troquei a ordem na tabela de resultados para decrescente.
Uptdate2 : Adicionei os resultados que o Daniel Abrunhosa mandou nos comentários.
Feed-me (RSS)