Page 42 - revista 2019
P. 42

Revista de la Facultad de Ingeniería, Año 6, Número 1
                  ¿Qué es la recursividad?

                  Si queremos  una definición  de recursividad  (o  “recursión”,  según la Real Academia)
                  probablemente optemos por alguna de las siguientes posibilidades.

                        Una función se llama a sí misma, una y otra vez, hasta que deja de llamarse.
                        Una alternativa a iteraciones
                        Algo matemático… ¿¡mejor ni meterse!?
                        Una forma de reducir complejidad en el diseño de algoritmos
                  La noción de que es una función que se llama hasta dejar de llamarse es básicamente
                  correcta: que la función se llame a sí misma identifica la recursividad, y si la función
                  no dejara eventualmente de llamarse, estaríamos en un ciclo eterno. Los casos en que
                  la  función  no  se  llama  a  sí  misma  son  clave;  volveremos  a  estos  “casos  base”  más
                  adelante.

                  La segunda idea proviene de la teoría de la computación, donde se demuestra que
                  todo  algoritmo  puede  implementarse  con  sólo  recursividad,  sin  “loops”  o  ciclos:
                  interesante pero poco práctico.
                  La orientación matemática es probablemente causada por varias definiciones, usadas
                  frecuentemente  al  ilustrar  recursividad,  aún  cuando  los  ejemplos  en  sí  sean  poco
                  relevantes a la práctica usual de un programador.

                        El factorial n! de un número n se define como 0!=0, y n!=n×(n-1)! si n>0.
                        La serie de Fibonacci 0, 1, 1, 2, 3, 5, 8, 13… (cuyos valores son usualmente
                         utilizados  en  metodologías  ágiles  para  estimar  complejidad  de  historias)  se
                         define como F 0=0, F 1=1, y F n=F n-2+F n-1 para n>1.


                  Estos  ejemplos,  aunque  válidos,  no  ayudan  mucho  al  estudiante  de  recursividad,
                  quien  con  justeza  podría  concluir  que  no  representan  la  realidad  del  trabajo  de
                  desarrollo.  (El  humor  de  Google,  mostrado  en  la  figura  1,  en  que  sugiere  una
                  respuesta recursiva a la consulta sobre recursividad, tampoco ayuda.)








                                Figura 1: Google bromea cuando se consulta por “recursión” en inglés,
                                preguntando al usuario si en realidad había querido buscar “recursión”.


                  La recursividad se aplica en definiciones matemáticas, en estructuras de datos, y en
                  algoritmos  de  todo  tipo,  por  lo  que  no  es  correcto  encasillarla;  veamos  a  cambio
                  cómo hacer para aprovecharla.

                  ¿Cómo pensar recursivamente?

                  ¿Cómo encontrar una función recursiva que resuelva un problema? Esto es en realidad
                  sencillo  a primera  vista:  debemos comenzar  por  asumir  que tenemos  ya  la  función
                  que resuelve el problema… ¡y usarla para resolver el problema!

                  Esto parece plantear un problema existencial: precisaríamos una máquina del tiempo
                  para poder saber la solución al problema, y así escribirla.. ¡difícil! Hay que corregir la



                                                                                                            41
   37   38   39   40   41   42   43   44   45   46   47