Foros del Web » Programando para Internet » PHP »

Error funcion recursiva

Estas en el tema de Error funcion recursiva en el foro de PHP en Foros del Web. hola a todos tengo un problema con una funcion recursiva, tengo 2 array uno con el ID de entidades ($entidad) y otro donde dice de ...
  #1 (permalink)  
Antiguo 28/04/2009, 20:58
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Error funcion recursiva

hola a todos tengo un problema con una funcion recursiva, tengo 2 array uno con el ID de entidades ($entidad) y otro donde dice de quien depende dependencia ($dependencia), a la funcion le paso la variable $depend que es el valor de la raiz el problema lo tengo cuando llamo de vuelta a la funcion y le paso otros parametros se me cuelga el apache todo mal a ver si alguien me puede ayudar

saludos y gracias a todos. les dejo el codigo a ver si me ayudan

ACLARACION si saco la linea de la recursion funciona, pero me da un nivel del arbol gracias a todos por su tiempo.

Código:
function depende($entidad,$dependencia,$depend)
{		
	$i=0;
	do 
	{
		if($dependencia[$i]==$depend)
		{
		global $dep;
		$dep[]=$entidad[$i];
		depende($entidad,$dependencia,$entidad[$i]); // aca llamo de vuelta a la misma funcion
		}	
	$i++;	
	}while(isset($dependencia[$i]));
}
  #2 (permalink)  
Antiguo 29/04/2009, 03:46
 
Fecha de Ingreso: noviembre-2008
Mensajes: 44
Antigüedad: 15 años, 5 meses
Puntos: 2
Respuesta: Error funcion recursiva

Me suena a llamadas recursivas infinitas o bucle infinito. Lápiz y papel, o mentalmente y síguele la traza.


Siento no ponerme, a seguir la traza y demás, pero ahora mismo no tengo tiempo, pero al menos te digo lo que puede ser. Espero que te sirva de algo.

Un saludo.
  #3 (permalink)  
Antiguo 29/04/2009, 08:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Error funcion recursiva

Viendo por encima nunca "regresas" de la funcion, es decir no hay un exit point, eso es lo que puede causar el problema.

Saludos.
  #4 (permalink)  
Antiguo 30/04/2009, 14:38
 
Fecha de Ingreso: marzo-2009
Mensajes: 31
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Error funcion recursiva

El final del bulce while no seria la salida hacia donde regreso??? o estoy interpretando mal

Gracias a todos
  #5 (permalink)  
Antiguo 30/04/2009, 19:09
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Respuesta: Error funcion recursiva

Pavlox:

Cita:
function depende($entidad,$dependencia,$depend)
{
$i=0;
do
{
if($dependencia[$i]==$depend)
{
global $dep;
$dep[]=$entidad[$i];
depende($entidad,$dependencia,$entidad[$i]); // aca llamo de vuelta a la misma funcion
}
$i++;
}while(isset($dependencia[$i]));
}
Cuando $dependencias[$i] NUNCA ES IGUAL A $depend, todo debe ir bien.
Ahora cuando $dependencias[$i] ES IGUAL A $depend,
llamas a la funcion nuevamente y la variable $i la pones en 0 nuevamente;
es decir que mientras exista IGUALDAD va a estar dando vueltas y vueltas.

Recomendacion:
La llamada a la misma funcion es mejor crear otra funcion para no enredarse.
Replantea lo que quieres hacer para rediseñar todo de nuevo, ya que se
ve muy confuso!!!.

Saludos
Franco
  #6 (permalink)  
Antiguo 30/04/2009, 21:41
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Error funcion recursiva

@Pavlox, es muy dificil llegar a saber como es que debe funcionar tu función o qué tareas debe realizar. A simple vista, yo te diría que revises y consideres, en primer lugar, el uso de do...while versus while, ya que allí podría estar el error. Luego, veo que la misma variable $dependencias siempre pasa como parámetro en cada recursión, sin modificarse. Es eso correcto?

Debes apagar el monitor por un par de horas, sentarte en una mesa con lápiz y papel, y pensar en la lógica de la función que deseas hacer, hacer el planteamiento, y una vez que tengas la secuencia correcta del proceso, plasmarlo en código.
Cita:
Iniciado por franco190453 Ver Mensaje
La llamada a la misma funcion es mejor crear otra funcion para no enredarse.
Replantea lo que quieres hacer para rediseñar todo de nuevo, ya que se
ve muy confuso!!!.
Pero justamente la definición de recursividad en una función es la capacidad de autoinvocarse, creando un ciclo que si está bien planteado llega a un punto de corte en el cuál se empiezan a retornar valores progresivamente hasta llegar a la primera invocación.



P.D.: @franco190453, por qué siempre escribes dando saltos de línea a tus mensajes?
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 20:05.