具有递归功能的Stackoverflow

时间:2013-04-26 18:08:56

标签: recursion f# stack-overflow

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。不确定如何解决这个问题。

1 个答案:

答案 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