Con el último ejemplo que pones es verdad que el algoritmo no funciona. (No me había fijado en el número de elemento sino solamente en los ejemplos).
Supongo que para n = 5 entonces
*
**
*
***
*
**
*
****
*
**
*
***
*
**
*
*****
*
**
*
***
*
**
*
****
*
**
*
***
*
**
*
 
Si te das cuenta hay unos patrones que se repiten:
para ** antes y después 
*
para *** antes y después
*
**
*
y así sucesivamente.
por lo que se deduce que tiene que ser una función recursiva para ir repitiendo los patrones para cada nivel:
funcion recursiva(cont)
{
     si (cont == 1)
     {
              escribir("*n");
     }
     sino
     {
          recursiva(cont -1);
          para i=1 hasta cont avance +1     escribir("*");
          escribir("n");
          recursiva(cont -1);
     }
}
 
int main ()
{
         leer(n);
         recursiva(n);
}