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