2
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。不知道如何解决这个问题。

4

1 回答 1

4

您的p=fun x -> x = 1当然会检查是否x为 1。

您的递归调用使用pon n,否则递减n

这将导致 n 变得越来越负,导致无限递归,因为 n 永远不会是 1。要解决这个问题,您不需要使用小于 1p的值调用或更改您的检查函数来执行除检查 a 之外的其他操作n值为 1。

也许试试let a, p, n = 3, ( fun x -> x <= 1 ), 4

于 2013-04-26T18:15:53.417 回答