Ackermann

A(4, 2) = ?

Indice:

74f758d95e3ee157e0a51d8cb4dc03b31f26ed07
Temps de calcul: 7.39097595215e-05 secondes.

Si vous avez la réponse postez votre algorithme avec celle-ci.

Solutions

Ocaml

let rec ackermann x y = match (x,y) with
 | (0, _) -> y + 1
 | (_ , 0) -> ackermann (x - 1) 1
 | (_, _) -> ackermann (x - 1) (ackermann x (y - 1));;

Python

def ackermann(m, n):
    if m == 0:
        return n + 1
    elif n == 0:
        return ackermann(m - 1, 1)
    else:
        return ackermann(m - 1, ackermann(m, n - 1))

Python

def ackermann(m, n):
    while m >= 4:
        if n == 0:
            n = 1
        else:
            n = ackermann(m, n - 1)
        m -= 1
    if m == 3:
        return (1 << n + 3) - 3
    elif m == 2:
        return (n << 1) + 3
    elif m == 1:
        return n + 2
    else:
        return n + 1

Version optimisée pour de petites valeurs de m.