SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
ハノイの
ハノイの塔を
実装してみる
実装してみる
自己紹介

•
    – プログラマ
     •
    – 東京      勉強会 主宰
     •
• 趣味
    – 料理
    – 電子工作
アジェンダ

• ハノイの塔とは?
• プログラミングを学ぶ上での意味
• 実装例の紹介
ハノイの
塔とは?
ハノイの塔とは?

• こんなの
•   年発売のゲーム
 – エドゥアール・リュカ
  • フランスの数学者
• 勝手に伝説を作る
 – ガンジス河畔で僧侶が
    ハノイを解いている。
   解き終わったら世界は
   崩壊し終焉を迎える。
ルール

• 1回に1枚ずつしか動かせない
• 自分より大きな円盤を
  上に乗せることはできない
• 最初と同じ状態を
  ゴールの杭に再現すれば完了
ハノイ…だと?




そりゃ世界も終わるよね
     なぜかはのちほど
プログラミングを
学ぶ上での
意味
なんか聞いたこと…あるよね?

• 再帰呼び出しの例題として有名
• そのほかの有名な例題
 – 階乗計算
  •
 – フィボナッチ数列
  •
 – ユークリッドの互除法
  • 2つの自然数の最大公約数を求める
再帰呼び出し

•
• 関数が自分自身を呼び出す
 – 変数のスコープに注意が必要
  • 関数より外なのか、中なのか
 – 一時変数などはスタックに確保
  • あふれると異常終了する
• 再帰的アルゴリズムを実装するのに最適
ハノイの塔の解法

• 円盤 個のハノイの塔を解くには
   – 杭をそれぞれ       とする
   – 個の円盤は    に積まれている
   – ハノイを何らかの方法で  に移動
   枚目の円盤を に移動
   – ハノイを何らかの方法で に移動



              「何らかの方法」って… (   ・ω・ )
で考えてみる

    – ハノイを何らかの方法で    に移動
–    –   なのでなにもしない
    枚目の円盤を に移動
– 円盤を    から に移動
    – ハノイを何らかの方法で に移動
–    –   なのでなにもしない



                  できたっぽい!   ・ω・
実演
実装例の
 紹介
ソースコードをご覧ください

• ポイント解説
 – ハノイを解く部分:           ~
  • 引数の配列 スタックとして使用 は参照渡し
  •       が になるまで自分自身を呼び出す
  • えっと…もうないや
余談:終わる世界

• 解くために必要な移動回数
 →       –
     n = 1   :    1 (回)
         2   :    3           • 1回1秒で移動させると
         3   :    7             約   億年かかる
         4   :   15
 → 64ハノイ?

     (       京     兆      億   万   )回
まとめと感想

• ハノイの塔なんて初めて書いた
 – 意外と勉強になった
• とある課題…だったんだけど
  不要になったのでネタにした
 –     書いた
• つい手元にある      で書いた
 –   でさらっと書けるとカッコいいな
参考文献

• ハノイの塔 –
    – 別の解法もあるので参照してみよう
              »


•
    –       種類以上の言語でハノイの塔を実装している
        •         って!
              »

• 【楽天市場】:木のおもちゃ製作所・銀河工房
    – 写真拝借しました。
              »
ご清聴ありがとうございました。

Contenu connexe

Tendances

沢マンパネル ポジションペーパ
沢マンパネル ポジションペーパ沢マンパネル ポジションペーパ
沢マンパネル ポジションペーパTakeshi Kakeda
 
Lifehack Vol3 Watanabe
Lifehack Vol3 WatanabeLifehack Vol3 Watanabe
Lifehack Vol3 WatanabeKenji Ohta
 
シェゾ・ウィグィィ論
シェゾ・ウィグィィ論シェゾ・ウィグィィ論
シェゾ・ウィグィィ論Ruchi Koita
 
株式会社デジカルメディア事業部 サービス紹介 Ver1.0
株式会社デジカルメディア事業部 サービス紹介 Ver1.0株式会社デジカルメディア事業部 サービス紹介 Ver1.0
株式会社デジカルメディア事業部 サービス紹介 Ver1.0Digical Media
 
Syakai kouken nituite
Syakai kouken nituiteSyakai kouken nituite
Syakai kouken nituiteyuru yaka
 
シェゾ・ウィグィィ論
シェゾ・ウィグィィ論シェゾ・ウィグィィ論
シェゾ・ウィグィィ論Ruchi Koita
 
やさしいDBの使い方(GT編)
やさしいDBの使い方(GT編)やさしいDBの使い方(GT編)
やさしいDBの使い方(GT編)Hiromu Shioya
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向Anto Mioyama
 
美体健身瑜珈教材
美体健身瑜珈教材美体健身瑜珈教材
美体健身瑜珈教材Lizhong Shen
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
「イシューからはじめよ」読書メモ3
「イシューからはじめよ」読書メモ3「イシューからはじめよ」読書メモ3
「イシューからはじめよ」読書メモ3yoktave yoknel
 
tobe-tobeで五つのスキルを手に入れよう
tobe-tobeで五つのスキルを手に入れようtobe-tobeで五つのスキルを手に入れよう
tobe-tobeで五つのスキルを手に入れようHiromu Shioya
 
一人から始めるCCPM Burndown Chart & Buffer Management
一人から始めるCCPM Burndown Chart & Buffer Management一人から始めるCCPM Burndown Chart & Buffer Management
一人から始めるCCPM Burndown Chart & Buffer Managementbash0C7
 
Nii Openhouse(20070608)
Nii Openhouse(20070608)Nii Openhouse(20070608)
Nii Openhouse(20070608)真 岡本
 
Lifehack Vol3 Nishikawa
Lifehack Vol3 NishikawaLifehack Vol3 Nishikawa
Lifehack Vol3 NishikawaKenji Ohta
 
あなたが知らないかもしれない 受託開発の基礎知識
あなたが知らないかもしれない受託開発の基礎知識あなたが知らないかもしれない受託開発の基礎知識
あなたが知らないかもしれない 受託開発の基礎知識Shunichi Arai
 
どっちの億万長者?
どっちの億万長者?どっちの億万長者?
どっちの億万長者?jwda
 

Tendances (20)

沢マンパネル ポジションペーパ
沢マンパネル ポジションペーパ沢マンパネル ポジションペーパ
沢マンパネル ポジションペーパ
 
Lifehack Vol3 Watanabe
Lifehack Vol3 WatanabeLifehack Vol3 Watanabe
Lifehack Vol3 Watanabe
 
シェゾ・ウィグィィ論
シェゾ・ウィグィィ論シェゾ・ウィグィィ論
シェゾ・ウィグィィ論
 
株式会社デジカルメディア事業部 サービス紹介 Ver1.0
株式会社デジカルメディア事業部 サービス紹介 Ver1.0株式会社デジカルメディア事業部 サービス紹介 Ver1.0
株式会社デジカルメディア事業部 サービス紹介 Ver1.0
 
Syakai kouken nituite
Syakai kouken nituiteSyakai kouken nituite
Syakai kouken nituite
 
シェゾ・ウィグィィ論
シェゾ・ウィグィィ論シェゾ・ウィグィィ論
シェゾ・ウィグィィ論
 
GLT #12 Naruhiko Ogasawara
GLT #12 Naruhiko OgasawaraGLT #12 Naruhiko Ogasawara
GLT #12 Naruhiko Ogasawara
 
やさしいDBの使い方(GT編)
やさしいDBの使い方(GT編)やさしいDBの使い方(GT編)
やさしいDBの使い方(GT編)
 
だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向だいたい30分で分かるオブジェクト指向
だいたい30分で分かるオブジェクト指向
 
美体健身瑜珈教材
美体健身瑜珈教材美体健身瑜珈教材
美体健身瑜珈教材
 
Cycle-Ring Intro
Cycle-Ring IntroCycle-Ring Intro
Cycle-Ring Intro
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
「イシューからはじめよ」読書メモ3
「イシューからはじめよ」読書メモ3「イシューからはじめよ」読書メモ3
「イシューからはじめよ」読書メモ3
 
tobe-tobeで五つのスキルを手に入れよう
tobe-tobeで五つのスキルを手に入れようtobe-tobeで五つのスキルを手に入れよう
tobe-tobeで五つのスキルを手に入れよう
 
一人から始めるCCPM Burndown Chart & Buffer Management
一人から始めるCCPM Burndown Chart & Buffer Management一人から始めるCCPM Burndown Chart & Buffer Management
一人から始めるCCPM Burndown Chart & Buffer Management
 
Nii Openhouse(20070608)
Nii Openhouse(20070608)Nii Openhouse(20070608)
Nii Openhouse(20070608)
 
Lifehack Vol3 Nishikawa
Lifehack Vol3 NishikawaLifehack Vol3 Nishikawa
Lifehack Vol3 Nishikawa
 
あなたが知らないかもしれない 受託開発の基礎知識
あなたが知らないかもしれない受託開発の基礎知識あなたが知らないかもしれない受託開発の基礎知識
あなたが知らないかもしれない 受託開発の基礎知識
 
三和一善
三和一善三和一善
三和一善
 
どっちの億万長者?
どっちの億万長者?どっちの億万長者?
どっちの億万長者?
 

Plus de Hiromu Shioya

不惑の生存戦略
不惑の生存戦略不惑の生存戦略
不惑の生存戦略Hiromu Shioya
 
珍獣 素人 そして くのいち
珍獣 素人 そして くのいち珍獣 素人 そして くのいち
珍獣 素人 そして くのいちHiromu Shioya
 
Rubyistが歩むべき道への道
Rubyistが歩むべき道への道Rubyistが歩むべき道への道
Rubyistが歩むべき道への道Hiromu Shioya
 
自宅で本気を出さされた
自宅で本気を出さされた自宅で本気を出さされた
自宅で本気を出さされたHiromu Shioya
 
クマとデバッグを
クマとデバッグをクマとデバッグを
クマとデバッグをHiromu Shioya
 
クマとジャーニーマンとステマ
クマとジャーニーマンとステマクマとジャーニーマンとステマ
クマとジャーニーマンとステマHiromu Shioya
 
お前の本気を見せてみろ!
お前の本気を見せてみろ!お前の本気を見せてみろ!
お前の本気を見せてみろ!Hiromu Shioya
 
Git道場を開催してきた
Git道場を開催してきたGit道場を開催してきた
Git道場を開催してきたHiromu Shioya
 
三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイルHiromu Shioya
 
俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平Hiromu Shioya
 
ベジェ曲線を書いてみた
ベジェ曲線を書いてみたベジェ曲線を書いてみた
ベジェ曲線を書いてみたHiromu Shioya
 
オススメの技術書
オススメの技術書オススメの技術書
オススメの技術書Hiromu Shioya
 
はじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGitはじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGitHiromu Shioya
 
肉とRubyとわたし
肉とRubyとわたし肉とRubyとわたし
肉とRubyとわたしHiromu Shioya
 

Plus de Hiromu Shioya (20)

不惑の生存戦略
不惑の生存戦略不惑の生存戦略
不惑の生存戦略
 
勉強会なう
勉強会なう勉強会なう
勉強会なう
 
LTの技術
LTの技術LTの技術
LTの技術
 
珍獣 素人 そして くのいち
珍獣 素人 そして くのいち珍獣 素人 そして くのいち
珍獣 素人 そして くのいち
 
夏夏
 
Tupperware
TupperwareTupperware
Tupperware
 
Rubyistが歩むべき道への道
Rubyistが歩むべき道への道Rubyistが歩むべき道への道
Rubyistが歩むべき道への道
 
自宅で本気を出さされた
自宅で本気を出さされた自宅で本気を出さされた
自宅で本気を出さされた
 
クマとデバッグを
クマとデバッグをクマとデバッグを
クマとデバッグを
 
クマとジャーニーマンとステマ
クマとジャーニーマンとステマクマとジャーニーマンとステマ
クマとジャーニーマンとステマ
 
お前の本気を見せてみろ!
お前の本気を見せてみろ!お前の本気を見せてみろ!
お前の本気を見せてみろ!
 
Git道場を開催してきた
Git道場を開催してきたGit道場を開催してきた
Git道場を開催してきた
 
三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル三周まわったおれたちのアジャイル
三周まわったおれたちのアジャイル
 
俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平俺たちの目指すモバイルの新たな地平
俺たちの目指すモバイルの新たな地平
 
2011年の漢字
2011年の漢字2011年の漢字
2011年の漢字
 
ベジェ曲線を書いてみた
ベジェ曲線を書いてみたベジェ曲線を書いてみた
ベジェ曲線を書いてみた
 
オススメの技術書
オススメの技術書オススメの技術書
オススメの技術書
 
はじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGitはじめて学ぶバージョン管理とGit
はじめて学ぶバージョン管理とGit
 
肉とRubyとわたし
肉とRubyとわたし肉とRubyとわたし
肉とRubyとわたし
 
祝辞
祝辞祝辞
祝辞
 

ハノイの塔を 実装してみる