Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

再帰的呼び出しーハノイの塔を例に

はじめに

この教材では、ハノイの塔シミュレータを用いて、 ハノイの塔のパズルを解くための命令列を生成するプログラムを作成する課題に取り組む。

この教材では、シミュレータの操作方法や画面の見方については説明しない。 それらについては、すでに用意されている解説動画を参照されたい。

この課題の目的は、 ハノイの塔の「解き方」を覚えることではない。 どのように考えれば、 大量の手順をプログラムで生成できるかを考えることが目的である。

ハノイの塔シミュレータの画面例

Figure 47:ハノイの塔シミュレータの画面例

関連資料・リンク

この課題では、以下の資料・ツールを使用する。

ハノイの塔シミュレータ

解説動画(YouTube)


問題設定

ハノイの塔のルールは、通常のものと同じである。


あなたが行うこと

あなたの課題は、次の3点である。

  1. ハノイの塔を解くための命令列を生成するプログラムを書くこと

  2. 生成された命令列をハノイの塔シミュレータに入力し、動作を確認すること

  3. すべての円板が移動できたことを、スクリーンショットで確認すること

命令は、次の形式で表す。

1行につき1命令とする。

詳細はビデオ教材「ハノイの塔シミュレータ(Web版)の使い方」で説明している。


プログラムについて

使用する環境

この課題では、 画面描画やGUIを作る必要はない。 出力はすべてテキストで構わない。


アルゴリズムについて

どのように命令列を生成するかは、各自に委ねる。

ただし、 なぜその順序で命令が生成されるのか を説明できることを求める。

命令列そのものを手で書いただけの提出は不可とする。 必ず「命令列を生成するプログラム」を作成すること。

なお、この課題で重視しているのは 再帰という書き方そのものではなく、 問題を同じ形の小さな問題に分けて考える視点である。 その考え方が説明できていれば、 プログラム上で再帰呼び出しを用いているかどうかは問わない。


生成AIの利用について

ChatGPTやGeminiなどの生成AIを、 実装の補助として使っても構わない。

ただし、

は、必ず自分の言葉で説明すること。

生成AIを使った場合は、

をレポート内に明記すること。


提出物

提出はKU-LMSから行うこと。 提出方法および提出期限はKU-LMSにて確認すること。

提出物は次の2点である。


1. プログラム+レポート文書


2. スクリーンショット


評価の観点

この課題では、命令列の長さや美しさは評価しない。

評価の対象は、次の点である。

正しく解けたスクリーンショットは必要条件であるが、 それだけで十分条件ではない。


最後に

この課題の目的は、

である。

その考え方は、典型的には「再帰的」と呼ばれるが、 プログラム中で必ず再帰呼び出しを書かなければならない、 という意味ではない。

大切なのは、

シミュレータは、 あなたの考えたプログラムが正しく動いているかを 確かめるための道具にすぎない。

自分のプログラムが、 どのような手順を生み出しているのかを、 ぜひ言葉にしてみてほしい。

ライセンス