回答編集履歴
2
スタックは使わないまでも、メモリは使うので、メモリ不足になる可能性はあります。
answer
CHANGED
@@ -23,4 +23,7 @@
|
|
23
23
|
| m, 0 -> rAck cont (m-1) 1
|
24
24
|
| m, n -> rAck (fun x -> rAck cont (m-1) x) m (n-1)
|
25
25
|
in rAck (fun x -> x) m n
|
26
|
-
```
|
26
|
+
```
|
27
|
+
|
28
|
+
いずれにしても、スタックは使わないまでも、メモリは使うので、
|
29
|
+
メモリ不足になる可能性はありますね。
|
1
別のサイトも追記した。
answer
CHANGED
@@ -11,4 +11,16 @@
|
|
11
11
|
| m, 0, _ -> ackermann (m - 1) 1 acc
|
12
12
|
| m, n, _ -> ackermann m (n - 1) ((m - 1)::acc)
|
13
13
|
ackermann m n []
|
14
|
+
```
|
15
|
+
|
16
|
+
以下のサイトにも、別バージョンがありました。
|
17
|
+
[algorithm - Is this implementation tail-recursive - Stack Overflow](http://stackoverflow.com/questions/4424532/is-this-implementation-tail-recursive)
|
18
|
+
```
|
19
|
+
let Ackb m n =
|
20
|
+
let rec rAck cont m n =
|
21
|
+
match (m, n) with
|
22
|
+
| 0, n -> cont (n+1)
|
23
|
+
| m, 0 -> rAck cont (m-1) 1
|
24
|
+
| m, n -> rAck (fun x -> rAck cont (m-1) x) m (n-1)
|
25
|
+
in rAck (fun x -> x) m n
|
14
26
|
```
|