Raised This Month: $12 Target: $400
 3% 

Funciones recursivas e iterativas


  
 
 
Thread Tools Display Modes
Author Message
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 04-17-2013 , 21:46   Funciones recursivas e iterativas
#1

Según explicó mi profesora de programación una función recursiva es aquella que se llama así misma tantas veces como sea necesario para lograr algo. Y una funcion iterativa es un bucle (for o while) que tambien se repite para lograr algo.

Según ella es mucho mas útil una función recursiva que hacerlo con un bucle, lo cual no estoy de acuerdo y hago este thread para que dejen sus opiniones y fundamentos aver si puedo aclarar un poco mi duda.

Voy a dar dos ejemplos simples hechos en python.
HTML Code:
def max_value_iterativa( nList ):
    
    output = nList[ 0 ];

    for i in nList:
        
        if i > output:
            output = i;
            
    return output;
    
def max_value_recursiva( nList, CurrentValue = 0, output = 0 ):
    
    if nList[ CurrentValue ] > output:
        output = nList[ CurrentValue ];
    
    if len( nList ) > CurrentValue + 1:
        return max_value_recursiva( nList, CurrentValue + 1, output );
    
    else:
        return output;
Un ejemplo de como llamar a estas funciones es:
HTML Code:
lista = [ 0, 20, 15, 35, 2 ];
print max_value_iterativa( lista );
print max_value_recursiva( lista );
Para llegar a que es mas eficiente usar la iteración que la recursión lo que hize fue pensar como las 2 funciones se almacenan en memoria.

La función iterativa: Se carga el bloque en memoria de la funcion en memoria una sola vez y cuando termina se borra de la memoria.

La función recursiva: Por cada item de la lista se va a cargar el bloque de la función en memoria. O sea que si tengo 5 valores en la lista y el bloque (por dar un ejemplo) ocupa 100B en memoria, en el momento que estén los 5 bloques simultaneamente en memoria se van a ocupar 500B de memoria.
Y en la función iterativa solo se carga una vez en memoria.

Vuelvo a preguntar, ¿Tengo razón?
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 04-17-2013 , 21:53   Re: Funciones recursivas e iterativas
#2

Aver si entendi , ella prefiere como ir chequeando valor por valor para ver si pertenece y si es asi , se ejecuta el bucle ? Sino no entendi bien a lo que quiere llegar.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 04-17-2013 , 21:58   Re: Funciones recursivas e iterativas
#3

Quote:
Originally Posted by lucas_7_94 View Post
Aver si entendi , ella prefiere como ir chequeando valor por valor para ver si pertenece y si es asi , se ejecuta el bucle ? Sino no entendi bien a lo que quiere llegar.
No entendí bien lo que dijiste pero podés buscar la info acá.
http://nelsongaldeman.com.ar/clase2.pdf
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 04-17-2013 , 22:21   Re: Funciones recursivas e iterativas
#4

yo estoy de acuerdo con vos... nose si te acordas la vez q preguntaste por un plugin que hacias que no le alcanzaba la memoria... era por q estabas haciendolo de forma recursiva y no liberabas nunca la memoria xD
__________________

www.amxmodx-es.com

Steam: Luchokoldo
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 04-17-2013 , 22:30   Re: Funciones recursivas e iterativas
#5

Por lo que veo , ella trata de declarar una funcion.

Primero hace un chequeo de la funcion y si es correcta manda un mensaje , sino le resta un numero. Me parece un razonamiento relativamente logico y correcto.

Vos decis de hacer el chequeo adentro del while ?

fuera de contexto , el ejemplo que diste , los parametros no coinciden con la funcion que distes.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.

Last edited by lucas_7_94; 04-17-2013 at 22:31.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 04-17-2013 , 23:44   Re: Funciones recursivas e iterativas
#6

Quote:
Originally Posted by lucas_7_94 View Post
Por lo que veo , ella trata de declarar una funcion.

Primero hace un chequeo de la funcion y si es correcta manda un mensaje , sino le resta un numero. Me parece un razonamiento relativamente logico y correcto.

Vos decis de hacer el chequeo adentro del while ?

fuera de contexto , el ejemplo que diste , los parametros no coinciden con la funcion que distes.
No Lucas, lo que yo digo es que es siempre mejor usar la forma iterativa que la forma recursiva.

PD: No coinciden pero los dos ultimos parámetros son opcionales porque tienen asignado un valor por defecto.
__________________
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
lucas_7_94
Leche Loco
Join Date: Mar 2009
Location: Argentina
Old 04-18-2013 , 03:53   Re: Funciones recursivas e iterativas
#7

Pero para como lo entendi yo esta bien (Lo que escribi)? Porque no estoy seguro de entender la logica con la cual ella quiere dar el mensaje.
__________________
ATWWMH - MiniDuels
Madness is like gravity, just need a little push.
lucas_7_94 is offline
Send a message via Skype™ to lucas_7_94
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 04-18-2013 , 07:32   Re: Funciones recursivas e iterativas
#8

#Lucas
No importa el resultado, quiere saber cuál método es "mejor".

#Neeeel
Algo simple,
Las funciones iterativas son más rápidas que las funciones recursivas.
Si hay problemas con la memoria se recomienda usar iteración de lo contrario obtendrás un consumo mayor porque en recursividad la memoria no se libera en cada lectura.
Las funciones recursivas se usa más para indagar en funciones matemáticas más complejas que para mostrar un output sencillo (a no ser que le output sea de una lista de lista (O quizás más profundo (Listas anidadas) aún como una lista de lista de lista) se entiende no?) Ya que salen mucho más natural y sencillo que estar mostrando valor por valor con un bucle. La recursividad se usa mucho en estructuras complejas como las de tipo Árbol en las cuales un ciclo no puede igualarlo ni suplantarlo.

En fin, si pueden realizar su función de manera iterativa y recursiva, prefieran la forma NO recursiva.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).


Last edited by gladius; 04-18-2013 at 07:34.
gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
XINLEI
me too
Join Date: Jun 2011
Location: Colombian Coffee storage
Old 04-18-2013 , 12:10   Re: Funciones recursivas e iterativas
#9

No tengo idea como maneja Python la memoria, pero la funcion recursiva (lo que me acuerdo de esa clase) es una funcion que se usa frecuentemente en otras clases, aunque solo nos explico un ejemplo parecido, creeria que es mas para evitar re-escitura de codigo y agregar un poquito mas de dinamismo al code.
XINLEI is offline
YakumoHiratsuhi
Veteran Member
Join Date: Dec 2010
Location: Dreαmlαnd.
Old 04-18-2013 , 14:57   Re: Funciones recursivas e iterativas
#10

Las funciones recursivas son infinitas por defecto, amenos de que estas se paren por algún error o motivo, mientras que las iterativas si estan bien programadas, solo llegan a cierto numero de iteraciones.

En mi opinión lo que dice gladius es lo más acertado, si se puede utilizar una iteración, usen la iteración, no todos los ensambladores manejan de la misma manera la memoria.
__________________
"Podra parecer ridiculo o imposible, pero este es el camino que seguimos los verdaderos hombres, si hay un muro en el camino, lo derribamos, si no hay camino, haremos uno, con nuestras propias manos, porque el magma de nuestro corazón arde en llamas."

Last edited by YakumoHiratsuhi; 04-18-2013 at 14:59.
YakumoHiratsuhi is offline
Send a message via MSN to YakumoHiratsuhi
 


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 05:42.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode