再帰(さいき)と三角形
同じようなプログラムを重ねることを多重ループといいます。多重ループは、力業(ちからわざ)でかっこ悪い、もう少し旨くかけないかと言うときに、再帰を使います
ここにあります
まず、ブロックを作ります
今回のブロックは引数(ひきすう)のあるブロックです作り方を説明すると
まず、ブロックを作るを押(お)して
次に
0,名前を「三角形」(さんかっけい)と書いて、
1,引数を追加(ついか)を押(お)して
2,引数の名前のところへ、「辺(へん)の長さ」とかいて
3,OKを押します
これで、引数付きのブロックが出来ます。
引数はたくさんつけれるはずですが、ここでは1個だけ。
次にプログラム
まず、三角形1つを書いてみましょうこんなふう
ああ~~今気がついたんだけど
(全部消すと、ペンを下ろす)を(x座標をー100y座標を-120)の下にすると、変な線が出ません。
これは普通の定義(ブロックとも言う)の呼び出し。
ブロックを呼び出すときに、このブロックは、辺の長さをブロックに渡します。
ブロックを二つ重ねると
再帰というのは、ブロックの中にブロックを書くこと下のようにやってみよう。
おや
一つ三角形を書いて
次に、長さを半分にして、また三角形を書いて
次に長さを又半分にして、三角形を書いて
どんどん書いて・・・でもとまらない。
再帰の場所を変えてみよう
これで、どうだあれ、三角形を書かずにどんどん小さくなっていく
それに止まらない
それならこれでどうだ
lもしの中に入れると、那賀産がどんどん小さくなっていって、10より小さくなったらもう止めだ
再帰はその再帰の中に、ストップするところを入れないといけない
これは、「もし辺の長さ>10」でないときはなにもしないでもどるから、次の再帰に進まないんだ
まず最初の定義(ブロック)は、長さが300で動き 長さを半分(150)にして、定義を呼び出す |
これで再帰が終了する | ||
↓ | ↑ | ||
2番目の定義は、長さが150で動き 長さを半分の75にして、定義を呼び出す |
前の定義にもどる | ||
↓ | ↑ | ||
3番目の定義は、長さが150で動き 長さをにして、定義を呼び出す |
前の定義にもどる | ||
↓ これを繰り返して ↓ |
↑ | ||
N番目の定義で、長さが10より小さくなったとき 次の定義は呼び出さないで終わる |
→ | 終わったから 前の定義にもどる |
|
できた
どんなときに使うの
う~~ん色々あると思うけど、ボクの知ってるのは
最大公約数を求める(ユークリッドの互除法)しか思いつかない。
たぶん、迷路を作るとか、色で塗りつぶすとか、も使うと思う。
いろいろプログラムをしていく内に出てくるだろう。
フラクタル
こんな図形は、フラクタルって調べると色々出てくるだろう
調べて作ってみてください。
次へ進む