Muchos programas de descargas de Internet, navegadores, y similares calculan el tiempo estimado para una descarga de varios archivos de la siguiente forma:
Tiempo restante = tiempo estimado para la descarga del que vaya a tardar más.
Y el tiempo de la descarga de cada fichero es:
Tiempo descarga = parte restante / velocidad por unidad de tiempo.
El problema de calcular el tiempo restante de una descarga múltiple de esta forma es que no tiene en cuenta que cuando un fichero termina normalmente su ancho de banda se reparte entre el resto de los archivos, por lo que la descarga de estos se acelera. Y cuando termina el segundo se acelera aún más... por lo que el tiempo inicial que da el programa generalmente suele ser bastante mayor del tiempo real para finalizar las descargas. En el programa "RapidSucker" que estoy haciendo poco a poco (le pondré una página en breve, aparte del cutreartículo anterior en la página) quería algo más realista, así que el módulo Calculador Casi Realista de Descargas que incluye hace:
En el código del RapidSucker se puede ver una implementación de ejemplo de esto, usando recursividad (y con alguna ñapa interna actualmente, todavía estoy prototipando), en los miembros calculatePendingTime y calculatePendingTimeRec de la clase RapidDownloader.