let rec f a p n = if p n then a else a + f a p ( n - 1 )
let a, p, n = 3, ( fun x -> x = 1 ), 4
f a p n
当n <= 0时获取stackoverflow。不确定如何解决这个问题。
答案 0 :(得分:3)
您的p
= fun x -> x = 1
当然会检查x
是否为1。
您的递归调用使用p
上的n
,否则会减少n
。
这将导致n变得越来越负,导致无限递归,因为n永远不会是1.要解决此问题,您不需要调用值p
小于n
的{{1}}或者更改您的检查功能,以执行除检查值1之外的其他操作。
也许尝试let a, p, n = 3, ( fun x -> x <= 1 ), 4
。