【问题标题】:Python - Dynamic Function - RecursionError, trouble in understandingPython - 动态函数 - RecursionError,理解困难
【发布时间】:2021-08-08 16:47:08
【问题描述】:

我在学校的某项任务上遇到了问题。在python中定义如下递归函数:

M(n+3) = M(n) - M(n+1) + 2*M(n+2)

为了测试以下结果,这些测试用例应该返回并且函数将在 0 到 9 的范围内被调用:

M(0) = 0, M(1)=3, M(2)=2

我尝试了以下方法:

def M(n):
    x = n + 3
    return M(x) - M(x+1) + 2 * M(x+2)


for i in range(0, 9):
    print(M(i))

但是,当调用时,达到最大递归数并给出错误。如果我只是太愚蠢并且在这里遗漏了一些东西,但我班上没有人能够解决这个问题而且我的老师今天很忙,所以我希望我能在这里找到一些帮助。

【问题讨论】:

  • 首先,您需要分别定义 n=0, 1, 2 的返回值(否则该函数将调用无限小的负值)。此外,您在定义x 的代码中有一个错误。将原方程改写为:M(n) = M(n-3) - M(n-2) + 2*M(n-1)。这应该更直接地变成一个程序。
  • 感谢您的帮助,我现在明白了!

标签: python function dynamic task


【解决方案1】:

转换这个

M(n+3) = M(n) - M(n+1) + 2*M(n+2)

M(n)=M(n-3)-M(n-2)+ 2*M(n-1)
  • 两者含义相同
  • 您还必须定义基本情况

所以这将是您的 Python 代码

def M(n):
    if n==0:
        return 0
    elif n==1:
        return 3
    elif n==2:
        return 2
    else:
        return M(n-3) - M(n-2) + 2 * M(n-1)

for i in range(0, 9):
    print(M(i))

希望这能解决您的问题

【讨论】:

  • 啊,我明白了。是的,现在我看到了,我真的不知道我是怎么想出来的……非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多