おう〜話がどんどん進んでいるようで・・・。(再帰の叩かれ台)
<!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>
普通に回答するのは、面白くないので、高速化を狙っているのですが・・・