「たらい回し関数(竹内関数)」と等価な関数
リカーシブコールを使わずに「たらい回し関数(竹内関数)」と等価な働きをする関数を日本語プログラミング言語Mind8 で実装し実行しました。
次回は、2つの関数が「等価」であることを証明します。
tarai3.src
たらい回しと等価な関数とは
xは 変数
yは 変数
zは 変数
xと yと zに 入れ
xが y 以下
ならば yを 返し
さもなければ
yが z 以下
ならば zを 返し
さもなければ
xを 返す
つぎに
つぎに。
呼び出し回数は 変数。
たらい回しとは
xは 変数
yは 変数
zは 変数
xと yと zに 入れ
呼び出し回数を 一つ増加し
xが y 以下
ならば yを 返し
さもなければ
[x - 1]と yと zを たらい回し
[y - 1]と zと xを たらい回し
[z - 1]と xと yを たらい回し
たらい回しし 返す
つぎに。
メインは
ixは 変数
iyは 変数
izは 変数
起動引数個数が 3と 等しい
ならば
呼び出し回数を クリアし
起動引数(1)を 数値変換し 捨て ixに 入れる
起動引数(2)を 数値変換し 捨て iyに 入れる
起動引数(3)を 数値変換し 捨て izに 入れる
「たらい回しと等価な関数を開始します。」と 表示し
ixと iyと izの たらい回しと等価な関数を 数値表示し 「です。」と 表示し 改行する
「竹内先生のたらい回し関数開始します。」と 表示し
ixと iyと izを たらい回し 数値表示し 「です。」と 表示し
呼び出し回数を 数値表示し 「回呼び出し」と 表示し 改行する
さもなければ
「起動引数個数は3個です。」と 表示し 改行する
つぎに。
実行結果
c:\mind8\pmind\lesson>tarai3 10 5 0
たらい回しと等価な関数を開始します。10です。
竹内先生のたらい回し関数開始します。10です。343073回呼び出し
c:\mind8\pmind\lesson>tarai3 12 6 0
たらい回しと等価な関数を開始します。12です。
竹内先生のたらい回し関数開始します。12です。12604861回呼び出し
c:\mind8\pmind\lesson>tarai3 14 7 0
たらい回しと等価な関数を開始します。14です。
竹内先生のたらい回し関数開始します。14です。588802013回呼び出し