n個のべき乗の合成

http://blog.koshigoe.jp/archives/2008/04/n2.html

Pythonではべき乗が**なので置き換えさせてもらうことにする。

>>> 2
2
>>> 2 ** 2
4
>>> 2 ** 2 ** 2
16
>>> (2 ** 2) ** 2
16
>>> 2 ** (2 ** 2)
16

ここまではいいのだけど、4番目から結合の順序によって結果が変わるようになる。

>>> ((2 ** 2) ** 2) ** 2
256
>>> 2 ** (2 ** (2 ** 2))
65536

累乗は結合法則をみたさない、というわけなので、まずはどっちの結果を期待しているか明確にしないと行けないんじゃなかろうか。

ちなみにPythonだと後者。

>>> 2 ** 2 ** 2 ** 2
65536

数学的に簡潔に各方法は知らないけど、Pythonコードで簡潔に書くのならこうかな。

>>> reduce(lambda x, y: y ** x, [2L] * 4)
65536L