再帰処理の動作を理解するのは難しいと思いますが、理解できる切っ掛けになればと思い実際のプログラムを作成してみました。 (再帰呼び出しは便利ですが、プログラムの動作が読みにくくなる。) 添付した画像のプログラムについて、動作を解説します。 ※proc( 5 )など、()内は引数。引数はnの値と理解してもらえればOK。 ①main関数にて、proc( 5 )関数を呼び出ます。 ②proc関数にて、if文はelseに入ります。 ③start = nを出力します。 ④proc関数(つまり自分自身の関数)を呼び出します。この時引数は、5 - 1の計算結果を渡すので、proc( 4 )関数として関数を呼び出します。 ⑤②~④を繰り返す。 ⑥②にて、nが0になったらproc( 0 )関数で呼び出した関数は終了しますが、その後④でproc( 1 )関数とかproc( 2 )関数とかで呼んでいるので、その関数の途中の処理に戻ります。 ⑦戻り先は、end = nを出力するところです。 ⑧proc( n ) 関数を終了します。 ⑨⑦~⑧を繰り返す。 上記説明だけでは、ちょっとわかりにくいと思うので、関数の処理順を書きます。 main関数→proc( 5 )関数→proc( 4 )関数→proc( 3 )関数→proc( 2 )関数→proc( 1 )関数→proc( 0 )関数→proc( 1 )関数→proc( 2 )関数→proc( 3 )関数→proc( 4 )関数→proc( 5 )関数→main関数 <補足> プログラムはC言語で作成しています。 【paiza.io】というWebサイトで手軽に使えるので、いろいろ試してみると理解が深まるかも。
なるほど:2
ありがとう:1
2回印字されますけど、それはフローに従って2回印字されますね 例えば echo() { 2を印字する } 1を印字する echoを呼び出す 1を印字する という処理があったら1は連続して2回印字されないですよね。それと全く同じ話です
procを(n-1)で呼び出しているから。 1回目が(5)で呼ばれたなら、2回目は(4)で呼ばれる。
< 質問に関する求人 >
基本情報技術(東京都)この条件の求人をもっと見る
求人の検索結果を見る
< いつもと違うしごとも見てみませんか? >
覆面調査に関する求人(東京都)この条件の求人をもっと見る