Knuth's up-arrow notation

Cette semaine, c'est Jonathan qui vous propose un #KataOfTheWeek : Notation des puissances itérées de Knuth

Briefing du Kata : Vous connaissez l'addition, la multiplication et l'exponentiation. Une multiplication est une répétition d'additions. Une exponentiation est une répétition de multiplication.

Donald Knuth a introduit en 1976 la notation des puissances itérées. Un façon de représenter l'opération est ↑. Une flèche correspond à une suite de multiplications:

2 ↑ 4 = ?
= 2 * (2 * (2 * 2))
= 2^4
= 16

2 une suite d'exponentiations:

2 ↑↑ 4 = ?
= 2 ↑ (2 ↑ (2 ↑ 2))
= 2^2^2^2
= 65536

Un exemple avec 3 ↑↑↑

2 ↑↑↑ 3 = ?
= 2 ↑↑ (2 ↑↑ 2)
= 2 ↑↑ (2 ↑ 2)
= 2 ↑↑ (2 ^ 2)
= 2 ↑↑ 4
= 2 ↑ (2 ↑ (2 ↑ 2))
= 2 ^ 2 ^ 2 ^ 2
= 65536

À vous de coder une fonction réalisant ce calcul en fonction des 3 paramètres.

Un petit exemple de résultats

4 ↑ 3 = 64
4 ↑↑ 2 = 256
3 ↑↑ 3 = 7625597484987
3 ↑↑↑ 2 = 7625597484987

Saurez-vous résoudre le problème ?

Bon courage !


Et sinon voici une solution proposée par l'auteur en Java :

private static double knuthArrowMath(double a, double b, int arrowNum) {
    if (arrowNum == 1)
        return Math.pow(a, b);
    double result = a;
    for (int i = 0; i < b - 1; i++) {
        result = knuthArrowMath(a, result, arrowNum - 1);
    }
    return result;
}

Votre équipe TakiVeille