データ構造とアルゴリズム論

データ構造とアルゴリズム論
第7章 再帰処理
平成27年6月26日
森田 彦
理解度チェック1(問題1)
空欄①に入るのは次のいずれですか?適切なも
のを選択して下さい。
1.i
5.10
2. No
3. 0
4.9
理解度チェック1 解答
空欄①に入るのは次のいずれですか?適切なもの
を選択して下さい。
1.i
2. No
3. 0
4.9
5. 10
 ”番兵”を入れるのは、最後の要素の一
つ後ろ。
 今の場合、A[9]の後ろだから、10になる。
理解度チェック2(問題2)
空欄②に入る適切な式は次のいずれですか?
1.i≧0
4.i≦40
2. i≧1
5. i≦41
3. i≦No
理解度チェック2 解答
空欄②に入る適切な式は次のいずれですか?
1.i≧0
4.i≦40
2. i≧1
5. i≦41
3. i≦No
 番兵法の場合、求めるデータが見つかった場所
(位置)が元々の配列の範囲内かどうかが問題。
 今の場合、元々の配列要素はA[40]まである。
 見つかった位置iがi≦40であれば、データを見つ
けたことになる。
理解度チェック3(問題3)
空欄③に入る適切な式は次のいずれですか?
1.No<A[Mid]
3.No>A[Mid]
2. No=A[Mid]
4.No≠A[Mid]
理解度チェック3 解答
空欄③に入る適切な式は次のいずれですか?
1.No<A[Mid]
3.No>A[Mid]
Low
Mid
・・・
A
Low
A
2. No=A[Mid]
4. No≠A[Mid]
High
・・・
High
・・・
・・・
 ③の条件が成り立てば、探索範囲が左半分に。
 今は昇順にソートしている。
 NoはA[Mid]より小さい。
理解度チェック4(問題4)
空欄④に入る適切な式は次のいずれですか?
1.No<A[Mid]
3.No>A[Mid]
2. No=A[Mid]
4.No≠A[Mid]
理解度チェック4 解答
空欄④に入る適切な式は次のいずれですか?
1.No<A[Mid]
3.No>A[Mid]
Low
Mid
・・・
A
Low
A
2. No=A[Mid]
4. No≠A[Mid]
High
・・・
High
・・・
・・・
 ③の条件が成り立てば、探索範囲が左半分に。
 今は降順にソートしている。
 NoはA[Mid]より大きい。
再帰とは?
 自身の定義(の一部)に自身を含むこと。
 日常的な例
鏡を持って鏡に向かった場合→鏡の中に
鏡が映る・・・鏡の列が続く
 プログラムの世界では
メソッドの再帰的呼び出し、あるいはデー
タ構造の再帰的定義に用いられる。
本章(本日)の学習のねらい
① メソッドの再帰的定義(呼び出し)の例を
学習する。→“再帰”の概念を理解する。
② 再帰処理の応用例としてフラクタル図形
の描画を学習する。
7-1 再帰処理
例:階乗の計算
5!=5×4×3×2×1
一般的には・・・
n!=n×(n-1)×(n-2)×・・・×2×1
これを書き直すと・・・
n!=n×(n-1)!
→ 再帰的定義
プログラムで表現するためにn!を
計算するメソッドFact(n)を定義
→ Fact(n)=n×Fact(n-1)
階乗:factorial
n!の計算(メソッドの再帰的定義による)
開始
Fact(n)
n≧2
nの入力
Ans ←Fact(n)
No
Yes
X ←n*Fact(n-1)
Ansの表示
Xの値を返す
終了
戻る
X ←1
終了条件が
必要!
メソッド呼び出しの連鎖→p.118参照
プログラムの作成→【基礎課題7-1 】(p.119)
【基礎課題7-2】-コラッツの予想
コラッツ(Collatz)の予想
ある数字が偶数なら2で割る
奇数なら3倍して1を加える
という操作を繰り返すと必ず1になる。
例:5→16→8→4→2→1
<課題の内容>
コラッツの操作を再帰的に繰り返すことで、上の
予想を実際に確かめるプログラムを作成する。
7-2 再帰処理の応用
フラクタル図形
どの一部をとっても全体と同じパターン(形)に
なっている図形
コッホ(Koch)曲線→【応用課題7-A】
(p.125)
植物(!?) → 【応用課題7-B】(p.131)
今後の予定
 6/26
 7/ 3
 7/10
 7/17
 7/24
第7章 再帰処理
第8章 連結リスト
第9章 木構造
第10章 スタックとキュー
第2回テスト
& 課題最終チェック
プリントをどれだけじっくり読んで理解しているか
がポイント→理解度確認テストでチェック
学習に当たって
 第7章までの基礎課題を全て終了した学
生は、7章の応用課題を終了すれば演習
を終えても結構です。
 来週以降に未提出の基礎課題を持ち越
すと、挽回が困難になります。
鏡の中の鏡
ずっと際限なく鏡
の列が続く。
「鏡に映す」という
操作の再帰的呼
び出しの例