Skip to content

Instantly share code, notes, and snippets.

@rossomax
Created June 26, 2013 01:53
Show Gist options
  • Select an option

  • Save rossomax/5864154 to your computer and use it in GitHub Desktop.

Select an option

Save rossomax/5864154 to your computer and use it in GitHub Desktop.
package main;
import (
"fmt"
)
var memo = [][]int {};
func init() {
memo = make([][]int, 100000);
for i := 0; i < 100; i++ {
memo[i] = make([]int, 100000);
}
}
func ackermann(m, n int) int {
res := 0;
v := memo[m][n];
if (v != 0) {
res = v;
} else {
switch {
case m == 0:
res = n + 1;
case n == 0:
res = ackermann(m - 1, 1);
default:
res = ackermann(m - 1, ackermann(m, n - 1));
}
memo[m][n] = res;
}
return res;
}
func main() {
fmt.Printf("ackermann(2, 1) = %d\n", ackermann(2, 1));
fmt.Printf("ackermann(2, 2) = %d\n", ackermann(2, 2));
fmt.Printf("ackermann(3, 4) = %d\n", ackermann(3, 4));
fmt.Printf("ackermann(4, 1) = %d\n", ackermann(4, 1));
}
@rossomax
Copy link
Author

CodeIQ アッカーマンの呪い
2次元配列のスマートな初期化の方法を考えるのが面倒臭かったので、とりあえず力技で。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment