我在将这段代码转换为递归函数时遇到问题。我的主要问题是试图弄清楚如何在递归中检查其是否大于f1。代码本身可以完美地工作,但是我希望将其转换为递归函数。
def countTerms(n):
f1=1+1+1/math.factorial(n)
m=1
f2=pow((1+1/m),m)
while f2<f1:
m+=1
f2=pow((1+1/m),m)
return round(f2,2)
答案 0 :(得分:0)
您正在寻找的是称为尾递归What is tail recursion?的东西。
我认为这是硬件问题?您要确定的是基本情况,终止条件和更新规则-您可以用这些术语来重新构造while
循环吗?
答案 1 :(得分:0)
通常,递归函数具有if
,其中包含两种情况:基本情况(完成计算时)和递归情况(当您仍需要进一步分解问题集时)。在这种情况下,基本情况是f2
达到或超过f1
:
import math
def countTerms(n, m=1, f2=2):
f1 = 2 + 1 / math.factorial(n)
if f2 < f1:
return countTerms(n, m=m + 1, f2=(1 + 1 / m) ** m)
else:
return math.round(f2, 2)
编辑:在递归调用中添加了显式关键字args,以使其更清楚如何为每次连续迭代更新m
和f2
。
答案 2 :(得分:0)
您可以更改为此:
def count_terms(n, m=1):
f1 = 1 + 1 + 1 / math.factorial(n)
f2 = pow((1 + 1 / m), m)
if f2 >= f1:
return round(f2, 2)
else:
m += 1
count_terms(n, m)