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