第15講 関数の再帰的呼び出しによる順列の作成
第3話 順列作成プログラムをするに当たって重要な注意
さて、いよいよプログラムに取り組んでいただきますが、
重要な注意をさせていただきます。それは、
セル番号とセルの中に入る数字を明確を明確に区別していただきたいということです。
0 | 1 | 2 | 3 | 4 |
3 | 1 | 5 | 4 | 2 |
これは、ビール瓶のラベルと中のビールの関係に相当します。
そして、セル番号が次元を表すと考えてください。
セル番号が変わるということは、異なる次元=異なる世界になるということです。
入れ子式の人形の例で喩えれば、
セル番号0が一番外側の人形、セル番号1が外側から2番目の人形、セル番号2が外側から3番目の人形、・・・
というわけです。
例えばセル番号をgで表せば、
次のセル番号の世界に進むにはf(g+1)とすればよいのです。
もちろん5次順列であれば、セル番号は4が最終番号ですから、if(g+1<5)などの条件を付けなければなりません。
重複検査は、3次魔方陣の作成プログラムを参考にしましょう。
尚、普遍的なプログラム=汎用的プログラムにするためにn次順列のnはscanfをつかってキーボードから値を入力できるようにしてください。
大変難しい課題ですので、プログラム冒頭を示しておきましょう。
#include<iostream>
using namespace std;
void f1(int g);
void f2();
int n,cn;
int a[20];
int main(){
cout<<"何次順列を作成させるのかキーボードのから入力してください。"<<endl;
cout<<"次数=";
scanf("%d",&n);
cn=0;
f1(0);
cout<<"順列が"<<cn<<"個できました。"<<endl;
}
void f1(int g){
int i,j,h;
for(i=1;i<n+1;i++){
a[g]=i;
・
・
・
}
}
void f2(){
・
・
・
}
粘り強く挑戦しましょう。
C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)