I think one of the simplest and most beautiful examples of this is the Mandelbrot set. Such a simple algorithm. You take a graph of the complex plane near the center, having your x-axis be the real component and your y-axis be the imaginary component. You pick a point on the imaginary plane - it doesn't matter where, it'll get you pretty, complex results no matter where you pick. Then, for each complex point you want the color of, you do the following algorithm:
Given a point to plot Z, and the initial point you picked C, run:
Z = Z^2 + C
This algorithm will either converge on zero or on infinity. If you set a threshold for where to decide that it is going off to infinity, then you can look at how fast it is converging to infinity by how many steps it takes to get to that threshold.
The mandelbrot set is the plot of the number of steps it takes to get past that threshold. That's it. For all it's beautiful complexity, it is such a simple algorithm.
Simple rules in themselves create simple results. But iterative simple rules can produce amazing complexity.