# 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).