O segundo o parâmetro é 1, no caso se fosse 0 as iteraçoes estariam ocorrendo de forma errada. Certo?
return total * num; // Leia-se return 0 * 1 e coloque este valor em total;
No final vai devolver o valor 0. Por isso que eu tenho que iniciar com 1 para conseguir a iteração é isso?