第9講 社員の分身の術(関数の再帰的使用)
第2話 社員の分身の術の簡単な実例
#include<stdio.h>
void f(); //『分身の術』とコンソールにさせる社員
int main(){
  f(0);
}
void f(){
  printf("分身の術\n");
  f(); //自分が自分に仕事を依頼している
}
コピペ用添付ファイル
実行すると、
分身の術
分身の術
分身の術
分身の術
分身の術
  ・

  ・

が繰り返された後に
wf
となってエラーします。
エラーしてしまうのは、
自分の分身を限りなく作り続け、
メモリの限界を超えてしまったからです。
そこで、分身を10回で止めるため次のように改良しましょう。

#include<stdio.h>
void f(int cn); //『分身の術』とコンソールに表示させる社員
int main(){
  f(0);
}
void f(int cn){
  printf("分身の術\n");
  if(cn<10)f(cn+1); //自分が自分に仕事を依頼している
}
コピペ用添付ファイル
今度は、
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術

と10回表示され、正常に終了します。

#include<stdio.h>
void f(); //『分身の術』とコンソールに表示させる社員
int main(){
  f(0);
}
void f(){
  printf("分身の術\n");
  f(); //自分が自分に仕事を依頼している
}
だと、fが無限に自分を分身させようとしますから、
メモリの限界を超えてエラーしてしまいますが、
分身の術は、簡単に使うことが出来ることがわかります。
#include<stdio.h>
void f(int cn); //『分身の術』とコンソールに表示させる社員
int main(){
  f(0);
}
void f(int cn){
  printf("分身の術\n");
  if(cn<10)f(cn+1); //自分が自分に仕事を依頼している
}
の方は、分身の術を10回に限定するために、
カウンターを設けています。
カウンターとは数える変数です。
cnがカウンターです。
  f(0);
ですから、cnは最初0です。それで、
0,1,2,3,4,5,6,7,8,9で10回になります。
ところで、
  f(0);
のように仕事を依頼することについて、
正式な名称を紹介していませんでしたが、
専門用語で『関数を呼び出す』といいます。
それで、
  if(cn<10)f(cn+1); //自分が自分に仕事を依頼している
のような呼び出しを『関数の再帰的呼び出し』といいます。
『関数の再帰的呼び出し』は『関数の再帰的使用』ともいいます。
void f(int cn){
  printf("分身の術\n");
  if(cn<10)f(cn+1); //自分が自分に仕事を依頼している
}
の場合、『関数の再帰的呼び出し』を9回行いますから、
人形の中に入れ子式に9個の人形が入っています。
  f(0);
で呼び出された人形(一番外側の人形)も含めて、
10個の人形が出来ています。
そして、それぞれの人形が
  printf("分身の術\n");
の仕事を行いますから、

分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術
分身の術

と10回表示されるわけです。

10個の人形が出来ています
(社員fは1人しかいませんが、
実際上は、分身の術によって10人のfがメモリ上で活躍しています。)
ので、
1からnまでの和や積なども、
関数の再帰的呼び出しで出来ます。
次話で実例を紹介しましょう。




第1話へ 第3話へ

a


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

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ