再帰的計算とフラクタルの作成

再帰的作業の例

授業で資料を配布するとき、以下のやり方はよく使用されています。

「自分の資料を取って、資料の残りを後の方に渡しください。」という指示によって、資料を一番前にいる生徒に渡すれば、資料が全員に届けます。

この例では、以下特徴があります。

再帰的な計算の例

$n$の階乗の計算F(n)を考えます。$n$の階乗は$n$と$n-1$の階乗の積であるので、以下の再帰的な計算によって、$n$の階乗を算出することができます。

上記の階乗の例では、F(n)はF自身を呼び出し、F(n-1)の値を取ってから、F(n-1)とnの積を返します。コードはシンプルであるという特徴があります。

演習1

再帰的計算で 1からnまでの各整数の平方の和を計算するS(n)を作ってください。

$$S(n) = 1+2^2+3^2+\cdots + n^2$$

フラクタルを再帰的計算で描画

コッホ曲線(Koch curve)の例を再検討します。

コッホ曲線の作業(関数 Draw_Koch)を定義します。

Draw_Kochは一層ずつ呼ばれますが、毎回の計算では、残りの計算回数(再帰的計算の回数) $n$ が $1$ で減ります。

終了条件として、

線分を用意して、関数をdraw_kochを呼び出します。

注意:draw_kochの中の最大深さNを大きい値にすると、計算時間が長くなります。

ツリーの描画

関数名: draw_tree(line, times)

作成方法

終了条件

![http://www.ces-alpha.org/download/gs/?label=F21&conf_id=CM2019&verify=faede](attachment:fractal_tree.svg)

注意:

上記の2つの例にある「残りの再帰的計算の回数n」の役割を理解してください。

レポート課題

フラクタルを自分で設計して、作成してください。

ヒント:Googleの画像検索の中で「フラクタル」の例を参考してください。