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
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:
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:
El resultado seria este:
Citar:
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