原です。

>児玉 です.

> > 佐藤と申します.
> > やりたいことは,nが与えられたときに(仮にn=3とする),
> > 例えば用意された配列 [A, B, C, D] に対して,
> >  [A, A, A]
>....
> > の様な順列を得たいのです.(4Pn)
>...
>
>再帰的な呼び出しをかけたら?
>
>def p(arr,res,n)
>if n==0 then print res,"\n";
>else
>         for i in arr
>                 p(arr,res+[i],n-1)
>         end
>end
>end
>
>print p(["a","b","c","d"],[],3)

ほとんど同じなんですけど、こんな風にするとかっこいいでしょう。

def power(n, m = n)
   if m == 0
     yield([])
   else
     power(n, m - 1) do |x|
       (0...n).each do |i|
         yield([i] + x)
       end
     end
   end
end

power(4, 3) do |x|
   p ["a", "b", "c", "d"].indexes(*x)
end

「Rubyプログラミング入門」の「8.3順列組み合わせライブラリ」に
載ってました。(と一読者のふり。)