大学1年の初心者プログラマーです。私の家庭教師は、再帰アルゴリズムについていくつかの調査を行い、それを非再帰にするように私たちに依頼しました。いや、いくらやっても無理そうです。質問は次のとおりです
A は文字列 (例: A = "hello") であり、抽象化である exchange は A の k 番目の文字を i 番目の文字と交換します。こんにちは" から "hlelo")。
アイデアは、可能なすべての順列を出力することです.C++のバージョンは読み取ります
void perm(char*a, const int k, const int n)
{
if(k==n)
{
cout << a;
}
else
{
for (i=k;i<=n;i++)
{
interchange(a, k, i);
perm(a, k+1, n)
}
}
}
私の家庭教師は、ホロウィッツの本「アルゴリズムとデータ構造」にのみ登場する ADL と呼ばれる言語を使用することを非常に好みます。彼は ADL で質問を提起したので、そのコードも追加します。非常に理解しやすいです。
proc perm(IN a, IN k, IN n)
if k=n then
print(a)
else
{
for i <- k to n do
call interchange(a,k,i)
call perm( a, k+1, n)
end
}
end
助けてくれる人に感謝します。マーティン