第9講 社員の分身の術(関数の再帰的使用)
第2話 社員の分身の術の簡単な実例
#include<stdio.h>
void f(); //『分身の術』とコンソールにさせる社員
int main(){
f(0);
}
void f(){
printf("分身の術\n");
f(); //自分が自分に仕事を依頼している
}
コピペ用添付ファイル
実行すると、
分身の術
分身の術
分身の術
分身の術
分身の術
・
・
が繰り返された後に
となってエラーします。
エラーしてしまうのは、
自分の分身を限りなく作り続け、
メモリの限界を超えてしまったからです。
そこで、分身を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話へ
初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ