データ構造とアルゴリズム論 第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章の応用課題を終了すれば演習 を終えても結構です。 来週以降に未提出の基礎課題を持ち越 すと、挽回が困難になります。 鏡の中の鏡 ずっと際限なく鏡 の列が続く。 「鏡に映す」という 操作の再帰的呼 び出しの例
© Copyright 2025 ExpyDoc