Chihirotlmt 发表于 2023-4-16 11:04:25

递归问题求解

以下函数用于可用于求方程的近似解,其中参数f为一个输入、输出均为数字的函数


def solve(f, x1, x2):

    mid = (x1 + x2) / 2

    if f(mid) == 0 or abs(x1 - x2) < 1e-8:

      return # <A>

    elif f(mid) * f(x1) > 0:

      return # <B>

    else:

      return # <C>

如何补全该函数使其可以正常使用?

isdkz 发表于 2023-4-16 11:13:35

要补全这个函数,您需要在每个返回语句中递归地调用 solve 函数。这是一个使用二分法求解方程的函数。函数 f 是一个一元方程,x1 和 x2 分别是搜索区间的上下限。下面是补全后的代码:

def solve(f, x1, x2):

    mid = (x1 + x2) / 2

    if f(mid) == 0 or abs(x1 - x2) < 1e-8:

      return mid

    elif f(mid) * f(x1) > 0:

      return solve(f, mid, x2)

    else:

      return solve(f, x1, mid)

在这个补全的版本中,当满足某个终止条件时(f(mid) == 0 或者 abs(x1 - x2) < 1e-8),函数将返回当前计算的中点 mid。否则,函数将在适当的子区间上递归调用自身。
页: [1]
查看完整版本: 递归问题求解