Foros del Web » Programando para Internet » Javascript »

too much recursion (function sumar)

Estas en el tema de too much recursion (function sumar) en el foro de Javascript en Foros del Web. Hola a todos.. tengo un problema en mis lineas de script en las cuales como recién estoy empezando las clases no e podido dar con ...
  #1 (permalink)  
Antiguo 06/05/2011, 16:03
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
too much recursion (function sumar)

Hola a todos..
tengo un problema en mis lineas de script en las cuales como recién estoy empezando las clases no e podido dar con el error siguiente

<script>

function sumar (sum_a, sum_b)
{
var resultado=sumar (sum_a+sum_b);
var a=sum_a;
var b=sum_b;
alert ("La suma planteada es: "+a+"+"+b+"="+resultado);
}
</script>



y lo activo la función desde el siguiente botón[en html]:



<input type='button' name='btnsumar' value='Sumar' onclick='sumar (txtsum_a.value,txtsum_b.value)'>



mis dos cuadros de textos (los que utilizare para sumar) son:



<input type='text' name='txtsum_b';>
<input type='text' name='txtsum_a';>


pero como dice el titulo, desde IE recibo un error similar al de mozilla
"too much recursion" en la consola de errores.
y desconozco cual podría ser la razón...
alguna idea de que puede estar fallando, o faltandome?

Desde ya muchas gracias
  #2 (permalink)  
Antiguo 06/05/2011, 16:09
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: too much recursion (function sumar)

Pues estás haciendo una función recursiva infinita, que se llama a si misma siempre.

Código Javascript:
Ver original
  1. function sumar (a, b)
  2. {
  3. var resultado=a+b;
  4. alert ("La suma planteada es: "+a+"+"+b+"="+resultado);
  5. }

Al llamar a sumar dentro de sumar está llamando a tu función dentro de la propia función lo cual no tiene sentido en este caso.
  #3 (permalink)  
Antiguo 06/05/2011, 16:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

buenas,
fijate en la siguiente linea, estas invocando nuevamente la misma funcion. de modo que cada vez que se invoca, continua invocandose a si misma. en otras palabras tienes un ciclo infinito debido a las multiples invocaciones. ¿que debes hacer? debes sumar directamente ambos argumentos convirtiendolo antes a integer. en este caso no veo la razon por que invocar nuevamente la funcion.

Código:
var resultado=sumar (sum_a+sum_b);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 06/05/2011, 16:10
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: too much recursion (function sumar)

Hola:

No entiendo porqué te complicas en algo tan sencillo... en el cuerpo de la función solo necesitas la última línea que tienes (tan solo faltaría parsear el texto para convertirlo a números...

La primera línea que tienes haces una llamada recursiva (usas el mismo nombre de la función) incondicional, y eso en programacióa está prohibido...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 06/05/2011, 16:12
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

valgame! tres respuestas instantaneas! esta vez nos gano alexg88,
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 06/05/2011, 16:17
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

puero y edito! gracias a todos

alexg88 asi:
var resultado=a+b;

no es el resultado que necesito.. de esa manera, agrupo dos numeros, no los suma..

Última edición por KsrZ; 06/05/2011 a las 16:31
  #7 (permalink)  
Antiguo 06/05/2011, 16:33
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

@KsrZ, lee los demas comentarios.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 06/05/2011, 16:39
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

zerokilled vere si entendi bien.. [ estoy en eso... voy de 1 en 1 ]
dices que

var resultado=sumar (sum_a+sum_b);

llama infinitamente a la misma funcion

function sumar (sum_a, sum_b)

no?
si es asi, eliminando la linea
var resultado=sumar (sum_a+sum_b);
lo soluciona.. pero como aria la suma? desconosco..
tan solo me dijeron
basandote en esto:
function sumar (sum_a, sum_b)

plantea como hacer para obtener el resultado de a y b. como tarea..
pero no se como aun.. e intentado un parde maneras anterior a esta, basandome en lo aprendido (poco).
pero ^^" no entiendo como.
  #9 (permalink)  
Antiguo 06/05/2011, 16:44
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

caricatos, esta linea te refieres?

alert ("La suma planteada es: "+a+"+"+b+"="+resultado);

intente dejarla de la siguiente manera:

alert ("La suma planteada es: "+a+"+"+b+"="+a+b);
no me funciono...

tambien intente asi:
alert ("La suma planteada es: "+a+"+"+b+"="sumar (a,b);
pero... resivi el mensaje de too much recursion. que a eso tambien intente editarle el nombre de la funcion dejandola asi
function proceso (a,b)
pero... sige fallando.. no me doy cuenta como llegarle a una solucion
  #10 (permalink)  
Antiguo 06/05/2011, 16:49
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

fijate en la misma linea que intentastes, var resultado=a+b;. es la forma correcta, pero obtienes el resultado incorrecto porque el operador de sumar (+) tambien se utiliza para concatenar (unir) string. por esa razon fue el comentario en mi mensaje anterior: debes sumar directamente ambos argumentos convirtiendolo antes a integer. todos los valores que obtienes desde controles de formulario (en tu caso el <input>), javascript lo obtiene como tipo string (cadena o texto). antes de poder realizar la suma debes convertir cada argumento a integer (entero o numero) con cualquiera de las siguientes funciones: Number, parseInt o parseFloat. luego de convertirlo puedes sumarlo adecuadamente.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 06/05/2011, 16:55
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Number, parseInt o parseFloat.... por ahora solo e utilizado text.
puede que sea el problema por el cual no pueda aun llegarle a una solución.
o, es probable que se aya tomado otro termino para los mismos, pero estoy seguro que no se nombraron ninguno de esos en clase.

se agradece paciencia D: soy nuevo en el tema..

Última edición por KsrZ; 06/05/2011 a las 17:00
  #12 (permalink)  
Antiguo 06/05/2011, 17:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

pues lo mas seguro el(la) profesor(a) se le olvido este detalle: todos los valores que obtienes desde controles de formulario, javascript lo obtiene como tipo string. o habra sido intencional para que investigaran. porque de otra forma no es posible hacer el calculo.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #13 (permalink)  
Antiguo 06/05/2011, 17:35
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Cita:
Iniciado por zerokilled Ver Mensaje
pues lo mas seguro el(la) profesor(a) se le olvido este detalle: todos los valores que obtienes desde controles de formulario, javascript lo obtiene como tipo string. o habra sido intencional para que investigaran. porque de otra forma no es posible hacer el calculo.
pues.. tiempo de recurrir al profersor aer que dice..
  #14 (permalink)  
Antiguo 06/05/2011, 17:56
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

otra forma que tienes sin usar las funciones antes mencionadas, consiste en operar sobre los argumentos con otro operador aritmetico: resta, multiplicacion o division. cuando se realiza una de estas operaciones sobre un numero de tipo string, javascript automaticamente lo convierte a tipo de integer. es lo que se conoce como cohercion (o conversion) de tipos de datos. por ejemplo:
  • multiplicar por uno cada argumento
  • dividir cada argumento por uno
  • restar cero a cada argumento
en este caso, lo que sucede es que javascript intenta realizar una operacion artimetica en un tipo de valor que no es valido para la operacion. por tanto, primero lo intenta convertir al tipo correcto (integer). luego, al realizar la suma, ambos operandos estan en el mismo tipo de valor.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #15 (permalink)  
Antiguo 06/05/2011, 18:16
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

tomare notas del tema, lo e practicado con multiplicaciones y en ese caso anduvo bien.. pero, este caso la tarea indicada es suma.. y como dices, al estar en texto, el modo que estoy empleando me es un poco inútil, ya que, en casos se convierte en una formula infinita, y en el otro si sumo 123+123 me lo une dejándolo al resultado así 123123 ... :S
  #16 (permalink)  
Antiguo 06/05/2011, 18:27
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

pero analiza lo que te estoy indicando. multiplica cada argumento por 1 para convertirlo a numero. luego realiza la suma a partir de los resultados devueltos por la multiplicacion anterior.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #17 (permalink)  
Antiguo 06/05/2011, 18:46
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Intenté de la siguientes maneras:
function amasb (entrada)
{
var a=(sum_a*1);
var b=(sum_b*1);
alert ("La suma planteada es: "+a+"+"+b+"="+a+b);
}

function amasb (entrada)
{
var resultado=a+b
var a=(sum_a*1);
var b=(sum_b*1);
alert ("La suma planteada es: "+a+"+"+b+"="resultado);
}

function amasb (entrada)
{
alert ("La suma planteada es: "+sum_a+"+"+sum_b+"="+((sum_a*1)+(sum_b*1)));
}
y aun no consigo, quizá lo entendí mal
resivo el cartel de error en "sum_a is not defined"

echo, gracias !

<script>

function amasb (sum_a,sum_b)
{
alert ("La suma planteada es: "+sum_a+"+"+sum_b+"="+((sum_a*1)+(sum_b*1)));
}
</script>
  #18 (permalink)  
Antiguo 06/05/2011, 18:55
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Ordene mis lineas de la siguiente manera para que quedaran andando:

<script>

function amasb (sum_a,sum_b)
{
var a=(sum_a*1);
var b=(sum_b*1);
var resultado=(a+b)
alert ("La suma planteada es: "+a+"+"+b+"="+(resultado));
}
</script>
Gracias zerokilled
  #19 (permalink)  
Antiguo 06/05/2011, 18:56
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

muy bien!
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #20 (permalink)  
Antiguo 07/05/2011, 05:20
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: too much recursion (function sumar)

Sí, no caí en eso de que obtenías los datos de un campo de texto. Pero como te han dicho perfectamente lo único que tenías que hacer era convertir los strings a integer.
  #21 (permalink)  
Antiguo 10/05/2011, 23:20
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Hola, de nuevo >.<..
hay alguna manera de hacer esto, utilizando eval?
sin tener que pasarlo a integer, en este caso *1
  #22 (permalink)  
Antiguo 10/05/2011, 23:36
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: too much recursion (function sumar)

aunque no es la mejor manera, si quieres usar eval, hagalo. el problema va ser si tomas como costumbre solucionar los problemas con eval. ¿que de malo tiene eval? aparte de algunos factores tecnicos, como la prolongacion del tiempo de ejecuccoion -segun las fuentes que he leido-, la depuracion y lectura del codigo sera mas complicado, especialmente si usas variables. ¿por que? para que eval interprete tu codigo, debes pasarle las sentencias en forma de string. en ocaciones, a ese string hay que concatenarle el contenido de las variables de modo que terminas teniendo un string muy complicado de analizar. por ejemplo...
Código:
eval('sentencias' + variable + 'sentencias; sentencias; sentencias;' + variable + 'sentencias; /*se complica mas aun cuando tienes string */; "string' + variable + ' mas string";');
en definitiva es mas complicado; lo veo como la version hoygan en programacion. en fin, mi consejo es que no te acostumbres en depender de ella mientras no sea necesario o existan otras alternativas.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #23 (permalink)  
Antiguo 11/05/2011, 11:23
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años, 6 meses
Puntos: 26
Respuesta: too much recursion (function sumar)

Cita:
Iniciado por zerokilled Ver Mensaje
aunque no es la mejor manera, si quieres usar eval, hagalo. el problema va ser si tomas como costumbre solucionar los problemas con eval. ¿que de malo tiene eval? aparte de algunos factores tecnicos, como la prolongacion del tiempo de ejecuccoion -segun las fuentes que he leido-, la depuracion y lectura del codigo sera mas complicado, especialmente si usas variables. ¿por que? para que eval interprete tu codigo, debes pasarle las sentencias en forma de string. en ocaciones, a ese string hay que concatenarle el contenido de las variables de modo que terminas teniendo un string muy complicado de analizar. por ejemplo...
Código:
eval('sentencias' + variable + 'sentencias; sentencias; sentencias;' + variable + 'sentencias; /*se complica mas aun cuando tienes string */; "string' + variable + ' mas string";');
en definitiva es mas complicado; lo veo como la version hoygan en programacion. en fin, mi consejo es que no te acostumbres en depender de ella mientras no sea necesario o existan otras alternativas.
vale, gracias por el dato. tomare notas
  #24 (permalink)  
Antiguo 11/05/2011, 11:56
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: too much recursion (function sumar)

Si tienen ganas de leer un poco de teoría, y de como los statements with y eval atentan contra el lexical scoping de js:

http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#codewithcode-and-codeevalcode-as-dynamic-scope-features-in-ecmascript
__________________
blog | @aijoona

Etiquetas: function, recursion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:22.