如何将普通函数转换为递归函数?

时间:2019-02-26 03:53:14

标签: python recursion

我在将这段代码转换为递归函数时遇到问题。我的主要问题是试图弄清楚如何在递归中检查其是否大于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)

3 个答案:

答案 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,以使其更清楚如何为每次连续迭代更新mf2

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