我尝试创建一个取值为x的函数,并使用n + 1平方根项创建这样的模式:sqrt(x)^ sqrt(x)^ sqrt(x)^ sqrt( X)^ SQRT(X)...
def func(x,n):
a = x**0.5
i = 0
while i < n:
a = a ** (x**0.5)
i += 1
print a
例如,使用x = 2,函数不会收敛(到2),但在某种程度上呈指数增长,我不明白为什么。
对于第一次迭代(i = 0)它似乎是正确的,因为它计算,sqrt(2)^ sqrt(2),但是对于第二次迭代(i = 1)它给我2.0,并且它保持增加。
谢谢!
答案 0 :(得分:3)
要使sqrt(x)^sqrt(x)^sqrt(x)...
收敛,取幂需要被视为右关联,即sqrt(x)^(sqrt(x)^(sqrt(x)^...))
。但是您的代码将其计算为左关联:((...^sqrt(x))^sqrt(x))^sqrt(x)
。
您需要在
中切换术语的顺序a = a ** (x**0.5)
到
a = (x**0.5) ** a
答案 1 :(得分:3)
@interjay的上述答案说明了迭代方法的问题。作为替代方案,您还可以使用递归方法来计算此
from math import sqrt
def fun(x,n):
if n == 0:
return sqrt(x)
else:
return sqrt(x) ** fun(x, n-1)
>>> fun(2,2)
1.7608395558800285
>>> fun(2,3)
1.8409108692910108
>>> fun(2,10)
1.988711773413954
>>> fun(2,100)
2.0000000000000004