Create an unlimited counterstring
Haskell, 60 58 bytes

As a function we get:

f=length.show
iterate(\n-&gt;1+n+(f$n+1+f n))2&gt;&gt;=(++"*").show


Full program, 72 70 bytes

This outputs an infinite counterstring to STDOUT:

f=length.show
main=putStr$iterate(\n-&gt;1+n+(f$n+1+f n))2&gt;&gt;=(++"*").show


Inputting the length requires 20 additional bytes:

main=interact(\j-&gt;take(read j)$iterate(\n-&gt;1+n+(f$n+1+f n))2&gt;&gt;=(++"*").show)


This works up to your approximately your RAM size, since Haskell defaults numeric integral types to Integer.