第10講 社員が自分に命令することを繰り返す(関数の再帰的使用)

第8話 関数の再帰的使用によって2次元ループを実現する

C言語
を関数の再帰的使用で実現するプログラム
解答例
#include<stdio.h>
int a[10][10];
void f(int i);
void g(int i,int j);
int main(){
  f(0);
}
void f(int i){
  g(i,0);
  printf("\n");
  if(i+1<10)f(i+1);
}
void g(int i,int j){
  a[i][j]=10*i+j+1;
  if(a[i][j]<10)printf("00%d ",a[i][j]);
  if(a[i][j]>=10 && a[i][j]<100)printf("0%d ",a[i][j]);
  if(a[i][j]==100)printf("%d",a[i][j]);
  if(j+1<10)g(i,j+1);
}

実は、2つのタイプの関数を用意しましたが、
void f(int i,int j);
という関数を1つ用意すれば可能です。
別解ということで考えてください。
別解例は30行下。





























別解例
#include<stdio.h>
int a[10][10];
void f(int i,int j);
int main(){
  f(0,0);
}
void f(int i,int j){
  a[i][j]=10*i+j+1;
  if(a[i][j]<10)printf("00%d ",a[i][j]);
  if(a[i][j]>=10 && a[i][j]<100)printf("0%d ",a[i][j]);
  if(a[i][j]==100)printf("%d",a[i][j]);
  if(j+1<10){
    f(i,j+1);
  }
  else{
    printf("\n");
  }
  if(j>0)return;
  if(i+1<10)f(i+1,0);
}

解説
  if(j>0)return;
必須です。
例えば、f(0,9)まで進んだ後、
→f(0,9)→f(0,8)→f(0,7)→・・・→f(0,0)
とf(0,0)まで戻ってから、
f(1,0)へと進まなければならないからです。

長い間おつきあいありがとうございました。
これで
専門用語なしのC言語 C++入門第1部
は終了とさせて頂きます。
続いて、第2部を是非ともお読みください。


第7話へ 第2部第11講第1話へ

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門