递归列表逻辑错误

时间:2016-02-04 14:57:14

标签: scala recursion

我正在尝试在scala中构建一个列表,给出输入(长度和函数),输出将是从0到该长度为1的列表。

例如:

listMaker(3,f) = List(0,1,2)

到目前为止,我已经创建了一个辅助类,该类占用了2 int并在该范围内返回list

listMaker函数如下:

def listMaker[A](length:Int, f:Int =>A):List[A] = length match{
  case 0 => List()
  case _ => listMaker(length,f)
}

我的f函数只接受一个变量x并返回:

 def f(x:Int)=x 

下面的评论是有道理的,但它仍然让我犯了错误。我认为编辑过的代码是一种更容易获得我想要的方式

然而,现在我得到一个无限循环。我错过了什么部分逻辑?

1 个答案:

答案 0 :(得分:2)

递归函数通常必须逐渐地“关闭”。输入数据的片段直到没有任何东西 - 否则它永远不会终止。

在您的特定情况下,这意味着每个递归调用必须减少length,直到它达到零。

def listMaker[A](length:Int, f:Int =>A):List[A] = length match{
  case 0 => List()
  case _ => listMaker(length,f)
}

但是你没有减少length - 你将它保持不变到下一个递归调用,所以,你的函数不能终止。

(还有其他问题 - 你需要在递归时建立结果列表,但是你当前的代码只返回一个空列表。我认为这是一个学习练习,所以我没有提供工作代码...)。