无限指数循环 - Python

时间:2015-03-04 17:42:57

标签: python loops

我尝试创建一个取值为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,并且它保持增加。

谢谢!

2 个答案:

答案 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