AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Off-Topic / Chat General (https://forums.alliedmods.net/forumdisplay.php?f=136)
-   -   Funciones recursivas e iterativas (https://forums.alliedmods.net/showthread.php?t=213715)

Neeeeeeeeeel.- 04-17-2013 21:46

Funciones recursivas e iterativas
 
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?

lucas_7_94 04-17-2013 21:53

Re: Funciones recursivas e iterativas
 
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.

Neeeeeeeeeel.- 04-17-2013 21:58

Re: Funciones recursivas e iterativas
 
Quote:

Originally Posted by lucas_7_94 (Post 1934861)
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

rak 04-17-2013 22:21

Re: Funciones recursivas e iterativas
 
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

lucas_7_94 04-17-2013 22:30

Re: Funciones recursivas e iterativas
 
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.

Neeeeeeeeeel.- 04-17-2013 23:44

Re: Funciones recursivas e iterativas
 
Quote:

Originally Posted by lucas_7_94 (Post 1934870)
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.

lucas_7_94 04-18-2013 03:53

Re: Funciones recursivas e iterativas
 
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.

gladius 04-18-2013 07:32

Re: Funciones recursivas e iterativas
 
#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.

XINLEI 04-18-2013 12:10

Re: Funciones recursivas e iterativas
 
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.

YakumoHiratsuhi 04-18-2013 14:57

Re: Funciones recursivas e iterativas
 
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.


All times are GMT -4. The time now is 06:51.

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