Fala Gabriel, tudo certo?
Testei a sua função anosGeracoes
separadamente e ela retornava tudo certo, sem undefined
.
Para isto coloquei um console.log(i, anos, geracoes);
dentro da função e acompanhei a impressão das variáveis no loop. Eram 18, calculando os anos perfeitamente e sem o undefined no final.
Percebi então que você chamou essa função dentro de outra texto(anosGeracoes());
.. foi aí que o script se perdeu um pouco e confesso que não sei te explicar a função o que ocorreu porém, se você observar as funções estão disparando dois document.write
(um no texto() e outra no anosGeracoes().
O que pode ser feito ai?
Você precisará mudar:
DE: texto(anosGeracoes());
PARA: anosGeracoes();
Só com isso o código irá parar de retornar undefined no final e os anos serão impressos na mesma linha.
Se você quiser quiser que os anos sejam impressos um embaixo do outro é só mudar:
DE: document.write(anos + "; ");
PARA: texto(anos + "; ");
Essa alteração é feita dentro da função anosGeracoes()
Espero ter ajudado!