元組込みエンジニア 技研の2代目マルヤマです。

関数内のコードで自分自身を呼び出す関数
すなわちリカーシブ関数(再帰関数とも呼ばれます)を組んでみたときの話しです。

再帰関数の例で良く紹介されるのが、Nの階乗を求める関数ですよね。

プログラム言語学習の初期の段階でリカーシブ関数を学びますが
ビジネスプログラミングで必要になるケースは(わたしは)あまりありませんでした。
そのリカーシブ関数を実際に組んでみたときの話しです。

組込みで下位レイヤーの開発を行っていると、16進数の計算が必要な場面に出くわします。
例えば、メモリ空間に領域を確保したときに、
使用しているメモリ領域の終端を知りたいような場合です。
10進数と16進数が混ざった数式例を次に記載します。

上記の様な計算を行うとき、毎回電卓で計算するのが面倒なので、
10進数と16進数が混ざった文字列を計算できる電卓を作りました。
計算結果を求めるときにエンターキーを押すのも面倒なので、文字入力される都度計算させています。
コピー&ペーストにも対応でき、とても効率が上がりました。

その電卓ソフトの計算処理で、文字列の構文解析を行い計算する関数をリカーシブ関数で作りました。
計算処理で登場する関数の一覧。
(コードは一部しか記事に記載していません。
記憶からの再現したコードなのでtypoがあったらごめんなさい)

数式の文字列を解析して計算結果を返す関数StrinngCalc()から、
再帰的に自分自身StringCalc()を呼び出しています。
リカーシブ関数にすることによって、少ないコード量で計算処理が作れたと思っています。

実行してみたときのシミュレーションです。

構文解析には、リカーシブ関数を使うと効率的な事がありますね。

組込みソフトだと、あまりネストが深くなるとスタックも心配になりますが…