【发布时间】:2017-10-25 15:58:15
【问题描述】:
好的,我会尝试在此处提供所需的所有信息。这是我们必须在课堂上实现的许多功能之一,以解决河内塔问题。有问题的函数以相反的顺序(最大>最小)接收 3 个塔,我的问题中的圆盘数量,以及一个以空开头的字符串,该塔的级别已添加到列表中。
该函数需要递归地遍历塔的每个级别,并以单独的字符串打印该级别中的光盘。希望这是有道理的。如果需要,我可以详细说明。
这是我目前所拥有的:
stringFromBoardHelper :: Tower -> Tower -> Tower -> Int -> [String] -> [String]
stringFromBoardHelper _ _ _ _ [] = []
stringFromBoardHelper (t1:t1s) (t2:t2s) (t3:t3s) n discString = if n > 0
then stringFromBoardHelper t1s t2s t3s (n-1) ((stringFromThreeDiscs t1 t2 t3 n) : discString)
else discString
我的问题是现在我的代码只返回空列表,因为我的函数以空列表开头。
但是,如果我删除空的 listt 案例,那么我会因为没有详尽的案例而收到错误。有什么想法吗?
【问题讨论】:
-
如果
[String]参数代表你已经完成的工作,那么它是空的不是一个很好的基本情况!你的基本情况应该是没有工作要做的时候,而不是所有工作都要做的时候。您的基本情况可能应该是“所有部件都在我想要它们的地方”的意思。 -
.. 我的基本情况非常明显。我不敢相信我在这个功能上花了 2 个小时。谢谢你哈哈。由于某种原因,我的基本情况应该基于 n。