Python 递归几何序列

Python 递归几何序列,python,function,recursion,sequence,Python,Function,Recursion,Sequence,我的代码无法正常工作。我需要写一个递归函数 geometric_recursive 公式是 我的问题是我不能停止循环。 此外,该函数应具有与迭代版本相同的参数 def geometric(n: int) -> float: ''' Calculates a finite geometric series with q=0.5 as the base. ''' result = 0 for k in range(0, n+1): result += 0.5**k 我的代码是

我的代码无法正常工作。我需要写一个递归函数

geometric_recursive
公式是

我的问题是我不能停止循环。 此外,该函数应具有与迭代版本相同的参数

def geometric(n: int) -> float:
'''
Calculates a finite geometric series with q=0.5 as the base. 
'''
result = 0

for k in range(0, n+1):
    result += 0.5**k
我的代码是

    def geometric_recursive(k : int) -> float:
if k <= 0:
    return 1
else:
    return 0.5 ** geometric_recursive(k+1)

我希望有人能帮助我,因为你每次都以参数k+1的形式给出,所以基本上k永远不会是递归需要一个基本情况。你没有(或没有会击中的)。公式是无穷大的,但那是不实际的。你需要弄清楚什么时候你离答案足够近,可以停下来。这可以是迭代次数(Python的最大递归深度为一个上限)或精度级别


此外,函数似乎并不表示公式。这个公式看起来像是q^k的和,这里有q^(q^(q^(q^…)。没有求和。

首先让我们从数学的角度来看这个公式:
求和[0谢谢你的回复。我忘了添加公式的迭代版本。参数应该与迭代版本相同。我编辑了我的帖子。很抱歉confusion@Akule8当前位置请查看我编辑的帖子…我欠你一个人情。这奏效了。我现在知道我的问题出在哪里了。
assert geometric_recursive(2) == geometric(2)
def g_recurs(q, term=1, tot=0):
    # print(q, term, tot)  # uncomment for intermediate results
    tot += term
    term *= q
    if term < 1E-16:       # stop recursion when q**n < 1E-16
        return tot
    else:
        return g_recurs(q, term, tot)
>>> g_recurs(0.5)
2.0
 def g_recurs(n: int, term=1, tot=0) -> float:
    # print(q, term, tot)  # uncomment for intermediate results
    tot += term
    term *= 0.5
    if n == 0:
        return tot
    else:
        return g_recurs(n-1, term, tot)
>>> g_recurs(2)
1.75
def geometric_recursive(n:int) -> float:
    if n == 0:
        return 1
    term = 0.5 ** n
    return term + geometric_recursive(n-1)
>>> geometric_recursive(2)
1.75