cuado se envia un form (submit), se espera enviar la data del mismo al servidor, en tu caso no quieres eso, pero al usar onsubmit puedes cancelar ese envío al retornar false, el problema es que lo estás implementando mal, una opción seria:
onsubmit="
alert(factorial(this.
elements['factorial'].value));
return false;"
alert para mostrarlo como un mensaje
this.
elements, porque
this devuelve el formulario actual, pero ten en cuenta que el formulario puede tener
n elementos, debes indicar cual y que propiedad
PD: recuerda que los métodos recursivos pueden minar completamente la memoria, en el caso del factorial puede hacerse con ciclos también