F#、関数型言語ともに初心者です。
F#でアッカーマン関数を書いてみましたが 数字が大きくなった場合にスタックオーバーフローが発生しています。
末尾再帰にすることで最適化されて実行できるようになると思っておりますが、どのように書き換えれば良いかわかりません。
末尾再帰最適化により解決できる問題なのでしょうか?
また、書き換え後のソースをご教授いただきたいです。
###ソースコード
let rec ack m n = match (m,n) with | (0,_) -> n + 1 | (_,0) -> ack (m-1) 1 | (_,_) -> ack (m-1) (ack (m) (n-1)) printfn "%d" (ack 4 1)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。