SlideShare a Scribd company logo
1 of 12
課題①アルゴリズム演習

       解答&解説
解答
  function move($num, $from, $to)
  {
1.    if ($num > 1) {
2.           $rest = getRest($from, $to);
3.           move($num - 1, $from, $rest);
4.           move(1, $from, $to);
5.           move($num - 1, $rest, $to);
6.    } else {
7.           printText($from, $to);
8.    }
  }
解説
   n枚の円盤を(A) から(B)に動かす場合
    1.   一番大きい円盤を除いたn-1枚を(A)から(C)に移動 → 3
         行目
    2.   一番大きい円盤を(A)から(B)に移動     → 4行目
    3.   一番大きい円盤を除いたn-1枚を(C)から(B)に移動 → 5
         行目
0
                        n-1枚(n>1)
              ・
              ・
              ・


S(n-1)
             3行目
                           ・
                           ・
                           ・


S(n-1)+1     4行目
                           ・
                           ・
                           ・


S(n-1)+1+S(n-1)   5行目
=2*S(n-1)+1                         ・
                                    ・
                                    ・
解説
   n枚の円盤を(A) から(B)に動かす場合、
            1.    一番大きい円盤を除いたn-1枚を(A)から(C)に移動
            2.    一番大きい円盤を(A)から(B)に移動
            3.    一番大きい円盤を除いたn-1枚を(C)から(B)に移動
       n-1枚の円盤を(A) から(C)に動かす場合
                  1.        一番大きい円盤を除いたn-2枚を(A)から(B)に移動
                  2.        一番大きい円盤を(A)から(C)に移動
                  3.        一番大きい円盤を除いたn-2枚を(B)から(C)に移動
           n-2枚の円盤を(A) から(B)に動かす場合
                       1.    一番大きい円盤を除いたn-3枚を(A)から(C)に移動
                       2.    一番大きい円盤を(A)から(B)に移動
                       3.    一番大きい円盤を除いたn-3枚を(C)から(B)に移動
                n-2枚の円盤を(A) から(B)に動かす場合
                 ・・・
解説
   n枚の円盤を(A) から(B)に動かす場合、
      1.   一番大きい円盤を除いたn-1枚を(A)から(C)に移動
           1.        一番大きい円盤を除いたn-2枚を(A)から(B)に移動
                1.      一番大きい円盤を除いたn-3枚を(A)から(C)に移動
                     1.  ・・・
                2.      一番大きい円盤を(A)から(B)に移動
                3.      一番大きい円盤を除いたn-3枚を(C)から(B)に移動
           2.        一番大きい円盤を(A)から(C)に移動
           3.        一番大きい円盤を除いたn-2枚を(B)から(C)に移動
      2.   一番大きい円盤を(A)から(B)に移動
      3.   一番大きい円盤を除いたn-1枚を(C)から(B)に移動
解説
   n枚の円盤を(A) から(B)に動かす場合
    1.       一番大きい円盤を除いたn-1枚を(A)から(C)に移動
    2.       一番大きい円盤を(A)から(B)に移動
    3.       一番大きい円盤を除いたn-1枚を(C)から(B)に移動
   3つの円盤のハノイの塔で考える
        最初の呼び出し・・・move(3, ‘左’, ‘右’);
            n = 3、A=左、B=右、C=中央
   3枚の円盤を左から右に動かす場合
    1.       一番大きい円盤を除いた3-1枚を左から中央に移動
    2.       一番大きい円盤を左から右に移動
    3.       一番大きい円盤を除いた3-1枚を中央から右に移動
解説
   3枚の円盤を左から右に動かす場合
            一番大きい円盤を除いた2枚を左から中央に移動
        1.    1枚を左から右へ移動
        2.    1枚を左から中央へ移動
        3.    1枚を右から中央へ移動
            一番大きい円盤を左から右に移動
        4.    1枚を左から右へ移動
            一番大きい円盤を除いた2枚を中央から右に移動
        5.    1枚を中央から左へ移動
        6.    1枚を中央から右へ移動
        7.    1枚を左から右へ移動
解説
   move(3, ‘左’, ‘右’);
       if (3 > 1)
           $rest = getRest(‘左’, ‘右’); //$rest = ‘中央’
           move(3 - 1, ‘左’, ‘中央’);
               if (2 > 1)
                      $rest = getRest(‘左’, ‘中央’); //$rest = ‘右’
                      move(2 - 1, ‘左’, ‘右’);
                            else
                                printText(‘左’, ‘右’); // 1. 左から右
                      move(1, ‘左’, ‘中央’);
                          else
                                printText(‘左’, ‘中央’); // 2. 左から中央
                      move(2 - 1, ‘右’, ‘中央’);
                          else
                                printText(‘右’, ‘中央’); // 3. 右から中央

           move(1, ‘左’, ‘右’);
               else
                      printText(‘左’, ‘右’); // 4. 左から中央
           move(3 - 1, ‘中央’, ‘右’);
               if (2 > 1)
                      $rest = getRest(‘中央’, ‘右’); //$rest = ‘左’
                      move(2 - 1, ‘中央’, ‘左’);
                            else
                                printText(‘中央’, ‘左’); // 5. 中央から左
                      move(1, ‘中央’, ‘右’);
                          else
                                printText(‘中央’, ‘右’); // 6. 左から中央
                      move(2 - 1, ‘左’, ‘右’);
                          else
                                printText(‘左’, ‘右’); // 7. 右から中央
解説
   アルゴリズムをいかに忠実に実現できるかが重要
       再帰で書けるかどうかではなく、実現方法の1つとして再
        帰を選ぶという流れが大事
       実装の段階でアルゴリズムを疑わない
           実装しながら考えるとぐちゃぐちゃになる


   アルゴリズムを考える際にはレイヤーを意識するこ
    とが重要
       今回の例では、N枚を動かす場合にN-1枚の動かし方は既
        知であるという考え方
           レイヤーの粒度は問題によって様々
ちなみに
   再帰プログラムはメモリーの消費率が高い
       深さによって覚えておくものが増えるので
           一般的なループでは回数によって変化しない
   再帰で書けるものはループでも書ける
       場合によっては相当複雑になる
           ハノイの塔では異なるアルゴリズムを用いればループも可能
   再帰には必ず終了条件がいる
ループで書いてみた
   アルゴリズム
       いちばん小さい円盤とそれ以外の円盤を交互に動かす
       いちばん小さい円盤は常にB→C→A→B(円盤の数が偶数
        の場合)またはC→B→A→C(円盤の数が奇数の場合)の順
        に動かす
       いちばん小さな円盤以外の円盤を動かす場面では、動か
        せる方法は1通りしかない

More Related Content

Viewers also liked

Lisistrata di aristofane
Lisistrata di aristofaneLisistrata di aristofane
Lisistrata di aristofanemariangela60
 
Fitxa 9. Claus, compasos
Fitxa 9. Claus, compasosFitxa 9. Claus, compasos
Fitxa 9. Claus, compasoscpascual2b
 
Surveymonkey
SurveymonkeySurveymonkey
Surveymonkeyyanique16
 
Etapas del manejo de informacion
Etapas del manejo de informacionEtapas del manejo de informacion
Etapas del manejo de informacionDaf MaDo
 
Sisisiiiiiiiiiiilvia
SisisiiiiiiiiiiilviaSisisiiiiiiiiiiilvia
Sisisiiiiiiiiiiilviayeriscardenas
 
Armascontraapirataria
ArmascontraapiratariaArmascontraapirataria
Armascontraapiratariakikanovais
 
Arjunapuram pup school dfc
Arjunapuram pup school dfcArjunapuram pup school dfc
Arjunapuram pup school dfcDFC2011
 
Glogster presentation
Glogster presentationGlogster presentation
Glogster presentationsarahkimla04
 
Karine power
Karine powerKarine power
Karine powerBiaaka
 
Meeting Week 3 - 12/10/11
Meeting Week 3 - 12/10/11Meeting Week 3 - 12/10/11
Meeting Week 3 - 12/10/11Hayley1492
 
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICA
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICACOMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICA
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICAjessyfanny
 

Viewers also liked (16)

Lisistrata di aristofane
Lisistrata di aristofaneLisistrata di aristofane
Lisistrata di aristofane
 
Fitxa 9. Claus, compasos
Fitxa 9. Claus, compasosFitxa 9. Claus, compasos
Fitxa 9. Claus, compasos
 
Surveymonkey
SurveymonkeySurveymonkey
Surveymonkey
 
Etapas del manejo de informacion
Etapas del manejo de informacionEtapas del manejo de informacion
Etapas del manejo de informacion
 
Rs 06 g gps radiosonde
Rs 06 g gps radiosondeRs 06 g gps radiosonde
Rs 06 g gps radiosonde
 
Sisisiiiiiiiiiiilvia
SisisiiiiiiiiiiilviaSisisiiiiiiiiiiilvia
Sisisiiiiiiiiiiilvia
 
Diseña un fotogaleria
Diseña un fotogaleriaDiseña un fotogaleria
Diseña un fotogaleria
 
Armascontraapirataria
ArmascontraapiratariaArmascontraapirataria
Armascontraapirataria
 
Arjunapuram pup school dfc
Arjunapuram pup school dfcArjunapuram pup school dfc
Arjunapuram pup school dfc
 
Fitxa 27
Fitxa 27Fitxa 27
Fitxa 27
 
Fitxa 4
Fitxa 4Fitxa 4
Fitxa 4
 
Glogster presentation
Glogster presentationGlogster presentation
Glogster presentation
 
Karine power
Karine powerKarine power
Karine power
 
Meeting Week 3 - 12/10/11
Meeting Week 3 - 12/10/11Meeting Week 3 - 12/10/11
Meeting Week 3 - 12/10/11
 
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICA
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICACOMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICA
COMO FORMATEAR UNA LAP-TOP A ESTADO DE FABRICA
 
Prova2pdf
Prova2pdfProva2pdf
Prova2pdf
 

Recently uploaded

My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」inspirehighstaff03
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」inspirehighstaff03
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」inspirehighstaff03
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」inspirehighstaff03
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」inspirehighstaff03
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドKen Fukui
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドKen Fukui
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」inspirehighstaff03
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1Toru Oga
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドKen Fukui
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfyukisuga3
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」inspirehighstaff03
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドKen Fukui
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」inspirehighstaff03
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドKen Fukui
 

Recently uploaded (20)

My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
My Inspire High Award2024「外国人が日本のテーブルマナーに驚く理由は?」
 
My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」My Inspire High Award 2024  「正義って存在するの?」
My Inspire High Award 2024  「正義って存在するの?」
 
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
My Inspire High Award 2024「なぜ、好きなことにいつかは飽きるの」
 
My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」My Inspire High Award 2024 「本当の『悪者』って何?」
My Inspire High Award 2024 「本当の『悪者』って何?」
 
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」My Inspire High Award 2024「なぜ議会への関心が低いのか?」
My Inspire High Award 2024「なぜ議会への関心が低いのか?」
 
My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」My Inspire High Award 2024    「孤独は敵なのか?」
My Inspire High Award 2024    「孤独は敵なのか?」
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
My Inspire High Award 2024「世の中の流行はどのようにして生まれるのか」
 
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライドリアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
リアル戦国探究in米沢 事前講座2スライド(スタッフ共有用)『両雄の強さの秘密』についてのスライド
 
My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」My Inspire High Award 2024「老いることは不幸なこと?」
My Inspire High Award 2024「老いることは不幸なこと?」
 
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライドリアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
リアル戦国探究in米沢 当日講座3スライド(スタッフ共有用)『糧は三度はさいせず』についてのスライド
 
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
My Inspire High Award 2024「スーパーマーケットで回収されたキャベツ外葉は廃棄されているの?」
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1
 
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライドリアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
リアル戦国探究in米沢 当日講座2スライド(スタッフ共有用)『人を致すも人に致されず』についてのスライド
 
TEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdfTEAMIN Service overview for customer_20240422.pdf
TEAMIN Service overview for customer_20240422.pdf
 
Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
My Inspire High Award 2024「なぜ人は他人と違うところがあってもそれをなかなか誇れないのか?」
 
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライドリアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
リアル戦国探究in米沢 当日講座1(スタッフ共有用)『兵は詐をもって立つ』についてのスライド
 
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」My Inspire High Award 2024「他者と自分、対立を防ぐには?」
My Inspire High Award 2024「他者と自分、対立を防ぐには?」
 
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライドリアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
リアル戦国探究in米沢 事前講座1スライド(スタッフ共有用)『川中島の謎』についてのスライド
 

勉強会課題①解答

  • 2. 解答 function move($num, $from, $to) { 1. if ($num > 1) { 2. $rest = getRest($from, $to); 3. move($num - 1, $from, $rest); 4. move(1, $from, $to); 5. move($num - 1, $rest, $to); 6. } else { 7. printText($from, $to); 8. } }
  • 3. 解説  n枚の円盤を(A) から(B)に動かす場合 1. 一番大きい円盤を除いたn-1枚を(A)から(C)に移動 → 3 行目 2. 一番大きい円盤を(A)から(B)に移動 → 4行目 3. 一番大きい円盤を除いたn-1枚を(C)から(B)に移動 → 5 行目
  • 4. 0 n-1枚(n>1) ・ ・ ・ S(n-1) 3行目 ・ ・ ・ S(n-1)+1 4行目 ・ ・ ・ S(n-1)+1+S(n-1) 5行目 =2*S(n-1)+1 ・ ・ ・
  • 5. 解説  n枚の円盤を(A) から(B)に動かす場合、 1. 一番大きい円盤を除いたn-1枚を(A)から(C)に移動 2. 一番大きい円盤を(A)から(B)に移動 3. 一番大きい円盤を除いたn-1枚を(C)から(B)に移動  n-1枚の円盤を(A) から(C)に動かす場合 1. 一番大きい円盤を除いたn-2枚を(A)から(B)に移動 2. 一番大きい円盤を(A)から(C)に移動 3. 一番大きい円盤を除いたn-2枚を(B)から(C)に移動  n-2枚の円盤を(A) から(B)に動かす場合 1. 一番大きい円盤を除いたn-3枚を(A)から(C)に移動 2. 一番大きい円盤を(A)から(B)に移動 3. 一番大きい円盤を除いたn-3枚を(C)から(B)に移動  n-2枚の円盤を(A) から(B)に動かす場合 ・・・
  • 6. 解説  n枚の円盤を(A) から(B)に動かす場合、 1. 一番大きい円盤を除いたn-1枚を(A)から(C)に移動 1. 一番大きい円盤を除いたn-2枚を(A)から(B)に移動 1. 一番大きい円盤を除いたn-3枚を(A)から(C)に移動 1. ・・・ 2. 一番大きい円盤を(A)から(B)に移動 3. 一番大きい円盤を除いたn-3枚を(C)から(B)に移動 2. 一番大きい円盤を(A)から(C)に移動 3. 一番大きい円盤を除いたn-2枚を(B)から(C)に移動 2. 一番大きい円盤を(A)から(B)に移動 3. 一番大きい円盤を除いたn-1枚を(C)から(B)に移動
  • 7. 解説  n枚の円盤を(A) から(B)に動かす場合 1. 一番大きい円盤を除いたn-1枚を(A)から(C)に移動 2. 一番大きい円盤を(A)から(B)に移動 3. 一番大きい円盤を除いたn-1枚を(C)から(B)に移動  3つの円盤のハノイの塔で考える  最初の呼び出し・・・move(3, ‘左’, ‘右’);  n = 3、A=左、B=右、C=中央  3枚の円盤を左から右に動かす場合 1. 一番大きい円盤を除いた3-1枚を左から中央に移動 2. 一番大きい円盤を左から右に移動 3. 一番大きい円盤を除いた3-1枚を中央から右に移動
  • 8. 解説  3枚の円盤を左から右に動かす場合  一番大きい円盤を除いた2枚を左から中央に移動 1. 1枚を左から右へ移動 2. 1枚を左から中央へ移動 3. 1枚を右から中央へ移動  一番大きい円盤を左から右に移動 4. 1枚を左から右へ移動  一番大きい円盤を除いた2枚を中央から右に移動 5. 1枚を中央から左へ移動 6. 1枚を中央から右へ移動 7. 1枚を左から右へ移動
  • 9. 解説  move(3, ‘左’, ‘右’);  if (3 > 1)  $rest = getRest(‘左’, ‘右’); //$rest = ‘中央’  move(3 - 1, ‘左’, ‘中央’);  if (2 > 1)  $rest = getRest(‘左’, ‘中央’); //$rest = ‘右’  move(2 - 1, ‘左’, ‘右’);  else  printText(‘左’, ‘右’); // 1. 左から右  move(1, ‘左’, ‘中央’);  else  printText(‘左’, ‘中央’); // 2. 左から中央  move(2 - 1, ‘右’, ‘中央’);  else  printText(‘右’, ‘中央’); // 3. 右から中央  move(1, ‘左’, ‘右’);  else  printText(‘左’, ‘右’); // 4. 左から中央  move(3 - 1, ‘中央’, ‘右’);  if (2 > 1)  $rest = getRest(‘中央’, ‘右’); //$rest = ‘左’  move(2 - 1, ‘中央’, ‘左’);  else  printText(‘中央’, ‘左’); // 5. 中央から左  move(1, ‘中央’, ‘右’);  else  printText(‘中央’, ‘右’); // 6. 左から中央  move(2 - 1, ‘左’, ‘右’);  else  printText(‘左’, ‘右’); // 7. 右から中央
  • 10. 解説  アルゴリズムをいかに忠実に実現できるかが重要  再帰で書けるかどうかではなく、実現方法の1つとして再 帰を選ぶという流れが大事  実装の段階でアルゴリズムを疑わない  実装しながら考えるとぐちゃぐちゃになる  アルゴリズムを考える際にはレイヤーを意識するこ とが重要  今回の例では、N枚を動かす場合にN-1枚の動かし方は既 知であるという考え方  レイヤーの粒度は問題によって様々
  • 11. ちなみに  再帰プログラムはメモリーの消費率が高い  深さによって覚えておくものが増えるので  一般的なループでは回数によって変化しない  再帰で書けるものはループでも書ける  場合によっては相当複雑になる  ハノイの塔では異なるアルゴリズムを用いればループも可能  再帰には必ず終了条件がいる
  • 12. ループで書いてみた  アルゴリズム  いちばん小さい円盤とそれ以外の円盤を交互に動かす  いちばん小さい円盤は常にB→C→A→B(円盤の数が偶数 の場合)またはC→B→A→C(円盤の数が奇数の場合)の順 に動かす  いちばん小さな円盤以外の円盤を動かす場面では、動か せる方法は1通りしかない