計算機科学概論演習(課題2)

計算機科学概論演習(課題2)
岸本
今日の課題
• 再帰呼び出しの練習
– 課題A-1 竹内関数
– 課題A-2 星形を描く
– 課題B-1 ギャスケット図形
– 課題B-2 石取りゲーム
• 課題Aの〆切は今日中
• 課題Bの〆切は来週の金曜日まで
(ゴールデンウィークのため)
課題A-1 竹内関数
• 実装は簡単なはず
• 計算時間のかかるx,y,zを見つけること
• なぜそんなに計算時間がかかるのかを述べること
– 正確に述べようとすると多分難しいので、2-3行の
簡単な説明でよい
• 計算量という概念を体感することが目的
• デバッガーで振る舞いを確認するのもよい
課題A-2
• (turtles)は1回だけ呼ぶこと
• 課題のページ通りに実装すると次のように描
くはず(n=2の場合)
• タートルの向きに注意
課題B-1
• (draw-one-gasket size)を用意すること
– 描画後のタートルの向きに注意(描き始めの方向
と一致させる)
• 再帰呼び出し部分では
– sizeのone-gasketを描いた後
– 3カ所で再帰呼び出しを行って
size / 2のn-1次のギャスケットを
描く
課題B-2
• 教科書1.2.2の木構造再帰を参考にすること
• 実装の一例
– (nim2 n): メイン関数
– (nim-rec n player str): 再帰呼び出し用
– (append-move player num str):各指し手の文字列
(“S1”,”G2”など)を返す
という3つの関数を用意する
• 注意点: (string-append str1 str2)は、str1にstr2を
追加した文字列を新たに返す関数
– 文字列str1, str2は変更されない