Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語プログラミング言語Mindで「たらい回し関数」(リカーシブコール)2

Posted at

あまり回さない「たらい回し関数」

「たらい回し関数」で 検索すると いくつか記事がありますが、「たらい回し関数」の再帰呼び出し回数が 飛躍的に大きくなるのは、同じ結果を何度も再計算しているからで、一度計算した結果を保存し参照すれば、圧倒的に 再帰呼び出し回数が減る。ことが分かります。
日本語プログラミング言語mind8で試してみましたので ご覧ください。

Mindプログラム

tarai2.src
呼び出し回数は 変数。
たらい回し結果構造体は 構造体
   結果は ワード変数
   一次元は 102個の 結果
   二次元は 102個の 一次元
   全体は 102個の 二次元。
   
たらい回し結果有構造体は 構造体
   結果有は ワード変数
   一次元有は 102個の 結果有
   二次元有は 102個の 一次元有
   全体は 102個の 二次元有。
   
たらい回しとは
      xは  変数
      yは  変数
      zは  変数
   x2は 変数
   y2は 変数
      z2は 変数
   たらい回し結果は ワード変数
      xと  yと  zに  入れ
      xに 2を 加え x2に 入れる
      yに 2を 加え y2に 入れる
      zに 2を 加え z2に 入れる   

   呼び出し回数を 一つ増加し

      結果有(x2,y2,z2)  ならば
     結果(x2,y2,z2)を 返し 終わり
     つぎに 
      結果有(x2,y2,z2)に 1を 入れる
      
      xが  y  以下  
            ならば 
  	     yを 結果(x2,y2,z2)に 入れる 
         yを  返し
      さもなければ
                    [x - 1]と  yと  zを  たらい回し
          [y - 1]と  zと  xを  たらい回し
          [z - 1]と  xと  yを  たらい回し
          たらい回しし たらい回し結果に 入れる
          たらい回し結果を 結果(x2,y2,z2)に 入れる  
          たらい回し結果を 返す
      つぎに。
メインは 
   ixは 変数
   iyは 変数
      izは 変数
		起動引数個数が 3と 等しい
      ならば
	    呼び出し回数を クリアし
  		起動引数(1)を 数値変換し 捨て ixに 入れる
	 	起動引数(2)を 数値変換し 捨て iyに 入れる
 		起動引数(3)を 数値変換し 捨て izに 入れる
        「たらい回し開始します。」と 表示し
				 ixと iyと izとを 
            たらい回し  数値表示する
        「です。」と 表示し 
		呼び出し回数を 数値表示する 
        「回呼び出し」と 表示する
        改行する
       
            さもなければ
         「起動引数個数は3個です。」と 表示し 改行する
      つぎに
。

x,y,z は0以上100以下まで可能です

実行結果

c:\mind8\pmind\lesson>tarai 8 4 0
たらい回し開始します。8です。12605回呼び出し

c:\mind8\pmind\lesson>tarai2 8 4 0
たらい回し開始します。8です。177回呼び出し

c:\mind8\pmind\lesson>tarai 10 5 0
たらい回し開始します。10です。343073回呼び出し

c:\mind8\pmind\lesson>tarai2 10 5 0
たらい回し開始します。10です。297回呼び出し

c:\mind8\pmind\lesson>tarai 12 6 0
たらい回し開始します。12です。12604861回呼び出し

c:\mind8\pmind\lesson>tarai2 12 6 0
たらい回し開始します。12です。449回呼び出し

c:\mind8\pmind\lesson>tarai 14 7 0
たらい回し開始します。14です。588802013回呼び出し

c:\mind8\pmind\lesson>tarai2 14 7 0
たらい回し開始します。14です。633回呼び出し

c:\mind8\pmind\lesson>tarai2 16 8 0
たらい回し開始します。16です。849回呼び出し

c:\mind8\pmind\lesson>tarai2 18 9 0
たらい回し開始します。18です。1097回呼び出し

c:\mind8\pmind\lesson>tarai2 20 10 0
たらい回し開始します。20です。1377回呼び出し

tarai は、純粋に再帰呼び出ししています。
tarai2 が改良版です。

「たらい回し関数の価値」

「たらい回し関数の価値」は、再帰呼び出しの回数が大きいことにありますので、tarai2 が改良版 というのは間違いかも知れませんね。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?