# PHP, 524 bytes I arrived late at this party. My PHP solution is neither the smallest, nor the smartest. It just works. $a=$argv; $b=[['|','^',0,-1],['-','>',1,0],['|',v,0,1],['-','<',-1,$x=$y=$o=$p=$q=$r=0]]; for($t=$a[4];$t;$t--){$d=strpos(urdl,$a[2]);$c=$b[$d];$m[$y][$x]='@'; for($s=0;++$s<$a[1];){for($k=3;--$k;){for($i=$s;--$i;) $m[$y+=$c[3]][$x+=$c[2]]=$c[0];$x+=$c[2];$y+=$c[3];$c=$b[$d=($d+($a[3]==c?3:1))%4]; $m[$y][$x]=$c[1];}$o=min($x,$o);$p=max($p,$x);$q=min($y,$q);$r=max($r,$y);} for($i=$s;--$i;)$m[$y+=$c[3]][$x+=$c[2]]=$c[0];$m[$y][$x]='&';} for($y=$q;$y<=$r;$y++){$l='';for($x=$o;$x<=$p;$x++)$l.=$m[$y][$x]?:' '; echo rtrim($l)."\n";} How to run it: $ php -d error_reporting=0 recursive-ascii-spirals.php 4 r c 3 &--< v-<| |@^|< >--^| |@^|< >--^| |@^| >--^ $ php -d error_reporting=0 recursive-ascii-spirals.php 7 u '' 1 &>----v ||>--v| |||>v|| |||@||| ||^-<|| |^---<| ^-----< The detailed version with tests, explanation and other goodies can be found on [github](https://github.com/axiac/code-golf/blob/master/recursive-ascii-spirals.php).