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。不知道如何解决这个问题。具有递归功能的Stackoverflow
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。不知道如何解决这个问题。具有递归功能的Stackoverflow
你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
。
还值得注意的是,如果'f'被做了尾递归,那么代码将按照原样“工作”(即不会崩溃),因为'n'最终会下溢并从'Int32.Max '到'1'。 – ildjarn 2013-04-26 22:43:02
对!让我努力在其他方面获得这个f。 – Iter 2013-04-27 02:30:27
@ildjarn大声笑,好电话 – mydogisbox 2013-04-27 03:02:19
试图在这里建立代表。为什么要投票? – Iter 2013-04-26 18:18:15