Foros del Web » Programando para Internet » Javascript »

duda con recursividad

Estas en el tema de duda con recursividad en el foro de Javascript en Foros del Web. Hola a todos. Tengo el siguiente código. Funciona bien, la duda que tengo es que si este script provoca que consuma mas recursos en memoria. ...
  #1 (permalink)  
Antiguo 07/03/2010, 10:30
Avatar de nicosli  
Fecha de Ingreso: junio-2009
Ubicación: Cancún, Quintana Roo, Mexico
Mensajes: 72
Antigüedad: 15 años, 5 meses
Puntos: 5
duda con recursividad

Hola a todos.

Tengo el siguiente código. Funciona bien, la duda que tengo es que si este script provoca que consuma mas recursos en memoria. A que me refiero: Deje la ventana abierta donde tengo la pagina y me di cuenta en el administrado de tareas de windows que el iexplorer estaba muy arriba. Ya he hecho pruebas y conforme hace la recursividad va subiendo en memoria.

Código:
$(document).ready( function(){
	
	var cont = 0;
	var tope = 5;
	
	animaImagen(2);
	
	
	function animaImagen(actual){
		
		
		$("#contenedorImg").fadeIn(600).delay(6000).fadeOut(600, function(){
			
			$("#contenedorImg").css("background","url(imagenes/fondo"+actual+".jpg)");
			
		});
		
		if ( actual == tope )
			actual = 1;
		
	
		
		animaImagen(actual+1);
		
	}
	
	

	

});

Aqui esta la página
http://servicioconchoferencancun.com/
  #2 (permalink)  
Antiguo 07/03/2010, 14:42
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: duda con recursividad

los algoritmos recursivos deben usarse para lo que realmente se necesitan, que son básicamente leer arboles, entre otras cosas.

primero debes de decirnos ¿que hace exactamente el script?, si se encarga de una animación como supongo, no necesita recursión, simplemente puedes usar un setInterval, no veo imprescindible la recursión aquí

y este algoritmo al parecer nunca acaba, por eso la pila de llamadas puede llegar a consumir mucha memoria y pronto puede provocar el famoso StackOverflowException
  #3 (permalink)  
Antiguo 07/03/2010, 16:53
Avatar de nicosli  
Fecha de Ingreso: junio-2009
Ubicación: Cancún, Quintana Roo, Mexico
Mensajes: 72
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: duda con recursividad

gracias maycolalvarez por responder. Sin duda tengo claro lo que me dices. Este script lo que hace es cambiar el fondo de un div infinita veces. es por eso que use recursividad. Podrias explicarme un poco mas sobre setinterval.

Gracias
  #4 (permalink)  
Antiguo 07/03/2010, 17:03
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: duda con recursividad

Hola:

Los métodos recursivos suelen tener una condición de salida... evidentemente solo necesitas un bucle, aunque si es infinito tampoco sería bueno, por los recursos... con setInterval, sería:

actual = 2;
function animaImagen(){
//...
if ( actual == tope )
actual = 1;
}
setInterval(animaImegen, lapso);

lapso sería el intervalo en milisegundos para la ejecución de animaImagen...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 08/03/2010, 06:29
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: duda con recursividad

pero indudablemente con setInterval no saturas tanto la memoria, así que la recursividad aquí es inútil y poco eficiente, hazlo como te indico caricatos y suerte
  #6 (permalink)  
Antiguo 08/03/2010, 08:00
Avatar de nicosli  
Fecha de Ingreso: junio-2009
Ubicación: Cancún, Quintana Roo, Mexico
Mensajes: 72
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: duda con recursividad

Gracias por sus respuestas.

El motivo por la cual use recursividad fue por mi animacion. Cambio el fondo de un div infinita veces. Entiendo lo que me dicen, pero de que otra manera puedo hacer esta animacion? la opcion que tome fue poner un numero definido de iteraciones y segui usando recursividad. Aqui esta el codigo:

Código:
 var cont = 0;
	var totalImagenes = 5;
	var iteraciones = 1;
	
	animaImagen(2);
	
	
	function animaImagen(actual){
		
				
		$("#contenedorImg").fadeIn(600).delay(6000).fadeOut(600, function(){
			
			$("#contenedorImg").css("background","url(imagenes/fondo"+actual+".jpg)");
			
		});
		
		if ( actual == totalImagenes )
			actual = 1;
		
		
		
				
		if (cont < (iteraciones * totalImagenes)  ){
			cont++;
			//animaImagen(actual+1);
			setTimeout(function(){animaImagen(actual+1)}, 0);
		}
		else{
						
			$("#contenedorImg").css("background","url(imagenes/fondo"+actual+".jpg)");
			$("#contenedorImg").fadeIn(600);
		}
		
	}

Etiquetas: recursividad
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 09:04.