导致以下代码中的stackoverflow的原因

时间:2015-03-30 14:50:10

标签: recursion ocaml

我无法弄清楚为什么我在以下代码中不断出现stackoverflow错误。是什么导致了它?

let rec fl x y ct = match x with
    [] -> []
  | (h::t) -> if haskey ct y = true then (fl x y (ct + 1))
    else h :: (fl x y (ct + 1))
;;

1 个答案:

答案 0 :(得分:2)

你的fl函数无限地自我修复:

let rec fl x y ct = match x with
    [] -> []
  | (h::t) -> if haskey ct y = true then (fl x y (ct + 1))
    else h :: (fl x y (ct + 1))
;;

递归调用的唯一变化是ct的增量。据推测,你需要ct的某种终止条件,或者你需要用列表的尾部调用fl。