實作遞迴(5) – Ackermann function
阿克曼函數,特色是巢狀遞迴,它的函數定義是
A(m,n)={ \begin{cases} n+1,\ where\ m=0\\ A(m-1,1),\ where\ m>0\ and\ n=0\\ A(m-1,A(m,n-1)),\ where\ m>0\ and\ n>0\\ \end{cases}}
Golang
遞迴版本:
package main
import "fmt"
//遞迴版本Ackermann Function
func ack(m, n int) int {
if m == 0 {
return n + 1
}
if n == 0 {
return ack(m-1, 1)
}
return ack(m-1, ack(m, n-1))
}
func main() {
fmt.Println("input m,n:")
var n, m int
fmt.Scanf("%d,%d", &m, &n)
fmt.Printf("ack(%d, %d) = %d\n", m, n, ack(m, n))
}
Filed under: 演算法 - @ 2021 年 7 月 1 日 上午 11:34