メールマガジン・新着情報一覧
- TOP
- メールマガジン・新着情報一覧
- E-0156.再帰呼び出しによる階乗計算の実装— T.Y
2024.02.28
E-0156.再帰呼び出しによる階乗計算の実装— T.Y
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
再帰呼び出しによる階乗計算の実装
発行:エスオーエル株式会社
https://www.sol-j.co.jp/
連載「測定の新常識!?SOLがお伝えするノウハウ!」
2024年2月28日号 VOL.155
平素は格別のお引き立てを賜り、厚く御礼申し上げます。
座標測定機による精密測定やアプリケーション開発情報などをテーマに、
無料にてメールマガジンを配信いたしております。
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
こんにちは、こんばんは。
エスオーエル株式会社
営業技術グループの米村です。
前回の私担当のメルマガではWerth社の
アプリケーションである WinWerth にて使用される、
DMIS という言語でバブルソートを実装いたしました。
今回は「DMISにおいて再帰呼び出しは使えるのだろうか?」
ということが気になりましたので実験してみました。
実験の前に簡単に再帰呼び出しについて説明します。
再帰呼び出しというのは、プログラムでの関数の作り方のひとつです。
F という関数の中で更に引数を少し変えて再び同じ F の関数を呼び出す
という処理を繰り返すものになります。
今回は再帰呼び出しを学ぶ際にポピュラーな階乗計算をしてみます。
例えば整数 N=5 の階乗を求める場合は
5! = 5x4x3x2x1 = 120 となります。
これを再帰で実現する場合の処理は次の通りです。
1) 関数 F に引数 5 を与えて呼び出す。
2) 1*5=5 を計算し T に格納。
3) 関数 F に引数 5-1 を与えて呼び出す。(再帰呼び出し)
4) 5*4=20 を計算し T に格納。
5) 関数 F に引数 4-1 を与えて呼び出す。(再帰呼び出し)
・
・
・
引数 0 の場合関数を抜ける。
上記の計算を繰り返すことにより
5x4x3x2x1 の計算を実現し 5 の階乗を得ることが出来ます。
この計算を DMIS にて下記のように実装してみました。
-----------------------------------------
MACRO / Factorial
IF / ($CALLARG[0] = 0) , (Return)
LET / $tmp = $tmp * $CALLARG[0]
CALL / Factorial , $CALLARG[0]-1
(Return)
ENDMAC
DECL / INT, Num, tmp
LET / $Num = 5
LET / $tmp = 1
CALL / Factorial, $Num
TEXT / OUTPUT, '$Num! = $tmp'
ENDFIL
-----------------------------------------
MACRO が DMIS での関数の定義です。
Factorial という関数の中で更に「CALL / Factorial…」と
同じ関数を呼び出しているのが見て取れると思います。
これが再帰関数になります。
そして実行後の出力結果は以下となります。
---------------
5! = 120
---------------
問題なく実行することができ、計算結果も問題なく得られ
DMIS で再帰呼び出しが使えることがわかりました!
これでまた DMIS で作れる処理の幅が広がります!
これにて今回の内容は以上となります。
最後までお読みいただきありがとうございました。
--
T.Y

