Dios que ha creado los árboles ha utilizado un lienzo 3D además de haberlos llenado de casualidad y de gran complejidad, pero probablemente sobre el algoritmo que de base podría ser minimalmente el siguiente.
Paso 1: si una rama es lo suficientemente larga, conectar dos ramas a ella: una a la izquierda y una a la derecha. Ambas ramas nuevas deberían ser ligeramente más cortas que la rama principal.
Paso 2: repetir el paso 1 para ambas ramas nuevas
Step 1: If a branch is long enough, attach two branches to it: one on the left, and one on the right. Both the new branches should be slightly shorter than their parent branch. Step 2: Repeat Step 1 for both the new branches He aquí el resultado del video….

Intentemos entender cómo funciona el concepto de recursividad para dibujar el árbol. Mira el video y reconstruye el código que ejecuto.
function draw(startX, startY, len, angle,branchWidth) { ctx.beginPath(); ctx.save(); ctx.translate(startX, startY); ctx.rotate(angle * Math.PI/180); ctx.moveTo(0, 0) ctx.strokeStyle = "darkgreen"; ctx.fillStyle = "green"; ctx.lineWidth = branchWidth; ctx.lineTo(0, -len); ctx.stroke(); if(len <7) { ctx.beginPath(); ctx.arc(0, -len, 5, 0, Math.PI/2); ctx.fill(); ctx.restore(); return; } draw(0, -len, len*0.8, angle-10,branchWidth*0.8); draw(0, -len, len*0.8,angle+10,branchWidth*0.8); ctx.restore() } Si has prestado atención, la función draw se llama a sí misma muchas veces y cada vez que sus parámetros cambian. La recursividad es la técnica utilizada para dibujar el árbol.
Por recursividad se entiende simplemente llamar a una función dentro de la definición de sí misma, o en otras palabras, una función es definida recursivamente cuando en su definición aparece una referencia (llamada) a sí misma. En cada llamada aumenta la "profundidad" del procesamiento hasta alcanzar el objetivo, momento en el que la función regresa.
Muchos lenguajes de programación ofrecen la posibilidad de definir funciones o procedimientos recursivos; JavaScript naturalmente es uno de ellos. Hagamos un ejemplo para aclarar las ideas, veamos una función banal (no recursiva) para el cálculo de la suma de dos números:
| 12345 | function somma(a,b){ return document.write(a + b);} |
Veamos ahora el mismo ejemplo a través de una función recursiva:
| 12345 | function somma(a,b) { return b > 0 ? somma(a + 1, b – 1) : document.write(a);} |