在 Python 中对一个数取幂 N 次?
Exponentiate a number N times in Python?
我想编写一个函数,可以用相同的指数对基数进行 N 次幂运算。例如,如果我想对基数 2 进行三次平方,即计算 2^2^2^2,则预期答案为 256。这看起来微不足道,我编写了以下递归函数:
def exponentiate_n_times(base, exponent, n):
if n == 0:
return base**exponent
return exponentiate_n_times(base**exponent, exponent, n=n-1)
然而,输出不正确:
print(exponentiate_n_times(2, 2, 3))
# 65536
然后我在 Python 中尝试了这个:
2**2**2**2
它也returns
65536
这让我很困惑,因为我期待 256。
我不知道我的功能有什么问题。任何人都可以建议正确的方法来取幂 N 次吗?
所以你想计算 base ** (exponent ** n)
,因为运算符 **
已经从右到左绑定,我们可以跳过括号:
def exponentiate_n_times(base, exponent, n):
return base ** exponent ** n
exponentiate_n_times(2, 2, 3) # 256
exponentiate_n_times(3, 2, 3) # 6561
exponentiate_n_times(3, 3, 3) # 7625597484987
我想编写一个函数,可以用相同的指数对基数进行 N 次幂运算。例如,如果我想对基数 2 进行三次平方,即计算 2^2^2^2,则预期答案为 256。这看起来微不足道,我编写了以下递归函数:
def exponentiate_n_times(base, exponent, n):
if n == 0:
return base**exponent
return exponentiate_n_times(base**exponent, exponent, n=n-1)
然而,输出不正确:
print(exponentiate_n_times(2, 2, 3))
# 65536
然后我在 Python 中尝试了这个:
2**2**2**2
它也returns
65536
这让我很困惑,因为我期待 256。
我不知道我的功能有什么问题。任何人都可以建议正确的方法来取幂 N 次吗?
所以你想计算 base ** (exponent ** n)
,因为运算符 **
已经从右到左绑定,我们可以跳过括号:
def exponentiate_n_times(base, exponent, n):
return base ** exponent ** n
exponentiate_n_times(2, 2, 3) # 256
exponentiate_n_times(3, 2, 3) # 6561
exponentiate_n_times(3, 3, 3) # 7625597484987