第9講 関数の再帰的使用
第6話 3次順列を関数の再帰的使用を使わずにfor文で実現する
3次順列生成プログラム
#include<stdio.h>
void f(int n);
int main() {
  f(3);
  return(0);
}
void f(int n) {
  int i, j, k, l,h,hh, x[20], cn = 0;
  for (i = 0; i<n; i++) {
    x[0] = i + 1;
    for (j = 0; j<n; j++) {
      h = 1;
      if (j + 1 == x[0])h = 0;
      if (h == 1)x[1] = j + 1;
      if (h == 1) {
        for(k=0;k<n;k++){
          hh=1;
          for(l=0;l<2;l++){
            if(k+1==x[l]){
              hh=0;
              break;
            }
          }
          if(hh==1)x[2] = k + 1;
          if(hh==1){
            for(l=0;l<n;l++){
              printf("%d ",x[l]);
            }
            printf("\n");
            cn++;
          }
        }
      }
    }
  }
  printf("生成された順列は%d個です。\n", cn);
}

実行画面
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
生成された順列は6個です。


for文で作る順列生成ソフトは、4次を最後とします。
これを作っていただいている理由は、
関数の再帰的使用がいかに便利なものであるかを体感してもらためです。
for文だといちいちコードを作り直さなければなりませんが、
関数の再帰的使用だとコードが短いだけでなく、
汎用的なプログラムになります。
つまり、理論的には何次順列でも生成できるソフトになります。


第5話へ   第7話へ

002

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc** c言語 c** 入門 初心者 基礎から応用まで
eclipse c** 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C**入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC**による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ