元の配列を変更しないように、
すべての要素をコピーして、関数に渡しているのですが、
Person_ary = ('A'..'D').to_a
ary2 = Person_ary[0..-1]
go(ary2)

def go(per_ary)
go(再帰関数に、また別の配列を渡す)
end

どこで、ary2, per_aryを変更しているのか、
変更箇所が見当たらない

そして知らぬ間に、まるで魔法のように、
Person_aryの'A'が、'AB'に変わってしまう
["A", "B", "C", "D"]
["AB", "B", "C", "D"]