def f(b, n):
assert isinstance(n, int) and n >= 0
def _f(n):
if n == 0: return 1
else: return b ** _f(n-1)
return _f(n)
Pythonのクラスを受講して、高校の代数の学生が理解できるように、これが何をするのかを説明する必要があります。迷っています。誰かが私に答えを与えずに正しい方向に私を押すことができれば幸いです。
コードがデコレータを定義しているようです。_fnの内部定義は、再帰を容易にするためのものです。コードは以下を計算しています
b^(b^(b^(... (b^(b^0)))...))
すなわち、与えられた
b = 2
n = 3
値は次のようになります。
16 = 2^(2^(2^(2^0)
b
関数は、それ自体の累乗で累乗された時間を計算します。n-1
ここで、n
は少なくとも1
です。これは、この単純な非再帰関数と同等です。
def g(b, n):
assert isinstance(n, int) and n >= 0
ret = 1
for _ in xrange(n):
ret = b ** ret
return ret
数式として書かれた次のようになります。
Pythonクラスを受講して、高校の代数の学生が理解できるように、これが何をするのかを説明する必要があります
関数fは2つの整数bとnを取ります。最初のbを2番目のnの累乗で累乗し、nを1減らします。これは、 nがゼロになるまで繰り返され、累積結果が返されます。
これは、「何をするのか」のようなPython関連の質問には答えずassert isinstance(n, int) and n >= 0
、OPの演習として残しておきます。