Recursividad es un concepto muy poderoso en computación y es equivalente a herramientas para armar ciclos, comunes en muchos lenguajes de programación. Si alguien ha programado en Fortran, Pascal, C, C#, C++, Java, etc., seguramente estará familiarizado con construcciones como for o while.
Aunque no es lo más común en Scheme, ni en los lenguajes funcionales en general, una de las maneras de repetir una actividad en un programa se logra a través de ciclos. En muchos lenguajes existen construcciones conocidas como for, while, repeat o do, que son distintas formas de configurar ciclos o secuencias de expresiones que se repiten un cierto número de veces o hasta que una condición se cumpla.
Más adelante se verán otras variantes para realizar ciclos sobre estructuras particulares, por ejemplo, sobre una lista. Por el momento, sin embargo, la explicación se enfocará en el uso del while, el recurso más utilizado para generar ciclos. La construcción general es:
(while condición
expresiones)
Con while, la idea es que mientras se cumpla la condición, es decir, mientras la condición se evalúe como verdadera, se ejecutarán las expresiones. Veamos while en acción con un programa para calcular el factorial n! = n × n – 1 ×… × 1. Es claro que se quiere repetir la multiplicación varias veces para poder recorrer de la n al 1, o al revés. Será necesario utilizar una variable contador para contar de cero a n y una segunda variable para almacenar los resultados de las multiplicaciones parciales, resultado parcial. ¿Cuál debe ser el valor inicial de las variables contador y resultado-parcial? Y, más aún, ¿cómo almacenar el valor de esa multiplicación como el nuevo resultado parcial? Se hará un pequeño paréntesis para introducir la construcción que hace falta.