おう〜話がどんどん進んでいるようで・・・。(再帰の叩かれ台)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<title>TEST</title>

<body>
<pre>
<script type="text/javascript">

var permutation = function ( ary, n ) {
  var result = [ ];
  var len = ary.length;

  
  if( 'undefined' === typeof n )
    n = len;
  
  if( n < 1 || len < n || 'number' !== typeof n ) {
    return [ ];
  }

  (function ( ary0, ary1, n ) {

    if( 0 == ary1.length ) {
      result[ result.length ] = ary0;

    } else {
    
      var cnt = 0;
      var max = ary1.length;
      var cAry1;
      var f = n - 1;

      while( cnt < max ) {
      
        cAry1 = ary1.slice(0);
        cAry1.splice( cnt, 1 );

          arguments.callee( ary0.concat( ary1[ cnt ] ), 0 < f ? cAry1: [ ], f );

        cnt++;
      }
    }
  
  })( [ ], ary, n );

  return result;
};


document.write( permutation( [ 0,1,2,3,4 ] ).join( '\n' ));

</script>
</pre>

追加するなら、setTimeout を使い・・・。

普通に回答するのは、面白くないので、高速化を狙っているのですが・・・