4.5 Recursión

 

 

Una subrutina recursiva es una que se llama a sí misma, ya sea en forma directa o indirecta. La recursividad, que es la práctica de llamar funciones recursivas, puede ser una poderosa herramienta al trabajar con estructuras de datos que tienen patrones repetitivos. Algunos ejemplos son las listas enlazadas y varios tipos de gráficos conectados, en los que un programa debe volver a trazar su ruta.

Recursividad sin fin El tipo más obvio de recursividad ocurre cuando una subrutina se llama a sí misma.

Por ejemplo, el siguiente programa tiene un procedimiento llamado sinfín, el cual se llama a sí mismo repetidas veces sin detenerse:

 

    TITLE Recursividad sin fin (SinFin.asm)

    INCLUDE Irvine32.inc

    .data

          cadSinFin BYTE "Esta recursividad nunca termina",0

    .code

    main PROC

          call SinFin

          exit

    main ENDP

    ---------------------------------------------------------    

    SinFin PROC

          mov EDX,offset cadSinFin

          call WriteString

          call SinFin

          ret                                  ; nunca llega a esta línea

    SinFin ENDP

  END main

 

 

Desde luego que este ejemplo no tiene ningún valor práctico. Cada vez que el procedimiento se llama a sí mismo, utiliza 4 bytes de espacio en la pila cuando la instrucción CALL mete la dirección de retorno. La instrucción RET nunca se ejecuta.

 

Si tiene acceso a una herramienta de monitoreo del rendimiento, como el Administrador de tareas de Windows, ábrala y haga clic en el cuadro de diálogo Rendimiento. Después ejecute el programa SinFin.exe, que se encuentra en el directorio de este capítulo. La memoria se llenará lentamente y el programa consumirá el 100% de los recursos de la CPU. Después de unos cuantos minutos, la pila del programa se desbordará y se producirá una excepción del procesador (el programa se detendrá).

 

 

Inicio