Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Funciones Recursivas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Funciones Recursivas 
 
Buenas!.

Normalmente las funciones recursivas hacen un proceso local, pero, ¿ no suelen ser usadas para devolver un valor ?.
A menos que el valor pasado como parámetro sea una variable global o pública, digo yo.  

Me propuse mediante una función recursiva encontrar el valor mayor de un array. Pero la función recursiva
trabaja de una forma que al llegar al final de la función se ejecuta varias veces y sale ( lo podéis ver con F8 ),
puede que no sea la forma correcta.

Os muestro el código: ( Supuestamente recursividad lineal ).

Public Sub Main()
  
  Dim inumeros As Integer[] = [3, 1, 5]
  
  Print ValorMaximo(inumeros)
    
End

Public Function ValorMaximo(lista As Integer[], Optional mayor As Integer, Optional cuenta As Integer) As Integer
  
  If cuenta < lista.Count Then
    mayor = Max(mayor, lista[cuenta])
    Print mayor  
    ValorMaximo(lista, mayor, cuenta + 1)    
  Else
    Return mayor    
  Endif  
  
End
 


El resultado es este:

Citar:

3
3
5
0


0 Es lo que imprime o devuelve la función al final.
Digamos que si añadimos al final de la función recursiva algo como esto:

Public Function ValorMaximo(lista As Integer[], Optional mayor As Integer, Optional cuenta As Integer) As Integer
  
  If cuenta < lista.Count Then
    mayor = Max(mayor, lista[cuenta])
    Print mayor  
    ValorMaximo(lista, mayor, cuenta + 1)    
  Else
    Return mayor    
  Endif  
  Print "Esto se va a ejecutar también"

End
 


El resultado seria este:

Citar:

3
3
5
Esto se va a ejecutar también.
Esto se va a ejecutar también.
Esto se va a ejecutar también.
0


El mensaje se ejecutaría tantas veces como veces se ejecuta la función. Eso si, al final.
Pero ¿ que hace ese 0 ahí ?. Es como si devolviese nada.

Como veis la condicional, si ha llegado al limite devuelve el valor y hasta ahí. (Eso si fuera una función iterativa).
Pero parece que algo recursivo no trabaja así.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Funciones Recursivas 
 
Algo debo haber hecho mal en la función anterior.

Public Sub Main()

  Print Factorial(4)

End

Public Function Factorial(n As Integer) As Integer
  
  If n = 0 Then
    Return 1
  Else
    Return n * Factorial(n - 1)
  Endif
  Print "Se ejecuta también"
  
End
 


Devuelve:

Citar:

24


Ale, a repasar toca.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Funciones Recursivas 
 
Buenas!.

De esta forma funciona:

Public Function ValorMaximo(lista As Integer[], Optional mayor As Integer, Optional cuenta As Integer) As Integer
  
  If cuenta < lista.Count Then
    mayor = Max(mayor, lista[cuenta])  
    Return ValorMaximo(lista, mayor, cuenta + 1)    
   Else
     Return mayor    
  Endif  
 Print "Esto no se ejecuta"
  
End
 


Salida:

Citar:

5


Se va ejecutando el primer return que se llama a si misma y al final devuelve el valor en el último return.
En ese caso no llega al print del final de la función.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Funciones Trigonometricas zepjau Aplicaciones/Fragmentos de Código 2 Miercoles, 27 Julio 2011, 23:13 Ver último mensaje
Shell
No hay nuevos mensajes Representar Funciones Oleguer Controles/Librerías/Componentes 4 Domingo, 23 Septiembre 2012, 17:19 Ver último mensaje
Oleguer
No hay nuevos mensajes [C] Funciones CallBack tercoIDE C/C++ 3 Domingo, 30 Noviembre 2014, 22:21 Ver último mensaje
tercoIDE
No hay nuevos mensajes Funciones Y Parámetros Shell General 22 Viernes, 25 Septiembre 2015, 16:15 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron