Primer intento

Si, por ejemplo, se desea trazar un rectángulo sólido de 100 por 200, una primera idea puede ser dibujar el rectángulo de 100 por 200: luego trazar un rectángulo de 99 por 199; luego un rectángulo de 98 por 198 ... hasta que el rectángulo quede coloreado completamente.

Image 10_Recursividad_1

Empecemos por definir un rectángulo cuya altura y anchura dependan de dos variables:

   para rec :alto :ancho
      repite 2 [av :alto gd 90 av :ancho gd 90]
   fin
Para rellenar nuestro rectángulo, vamos a ejecutar:
   rec 100 200 rec 99 199 rec 98 198 ... rec 1 101
algo que conseguimos de forma recursiva haciendo:
   para rectangulo :alto :ancho
      rec :alto :ancho
      rectangulo :alto-1 :ancho-1
   fin

Probando rectangulo 100 200 nos encontramos con un problema: el procedimiento no se detiene cuando el rectángulo se ha rellenado por completo, sino que ¡continúa dibujando rectángulos!

Vamos a añadir un condicional que permita detectar cuando la altura o anchura son nulas. En ese momento, pediremos al programa que se detenga con la primitiva alto:

   para rectangulo :alto :ancho
      si o :alto=0 :ancho=0 [alto]
      rec :alto :ancho
      rectangulo :alto-1 :ancho-1
   fin
Nota: En vez de utilizar la primitiva o, se puede utilizar el símbolo "|", y escribiríamos:
   si :alto=0 | :ancho=0 [alto]

Loïc 2007-10-30