`printf` with some GNU extensions is accidentally Turing–complete because you can overwrite it's internal state. Common Lisp’s `format` is intentionally and safely Turing–complete because it includes directives for conditionals, iteration, goto, and recursion. The classic example for printing lists:
The directives for recursion takes a format string and a list, calls `format` on the string using the list as the list of arguments and then inserts the result into the current output. This is much less verbose than calling `snprintf` to create a temporary string and then insertimg it into the current output with %s. <https://www.lispworks.com/documentation/HyperSpec/Body/22_cg...>