Hola
maralbust!
Viendo tu código no genera lo que dices, mas bien genera un array de 2 espacios.
Si te fijas en tu bucle for, estas sobreescribiendo la variable local del bloque en cada iteración, sale del bucle y el array input solo contiene una cadena
"input type='text' name='porcentaje3' id='porcentaje3'>" y añades otro array al final que contiene la cadena
"input type='text' name='porcentaje4' id='porcentaje4'>", que fué lo último en lo que evaluó la variable i para romper la condición.
Tu problema lo podrías solucionar de una manera más fácil así:
Código:
function bandera(cont){
//El parametro cont vale 4
alert(cont);
var $arreglo = new Array();
for(var i=1; i <= cont; i++) $arreglo.push("<input type='text' name='porcentaje"+i+"' id='porcentaje"+i+"'>");
alert($arreglo);
}
Un saludo!