【问题标题】:evaluating Lagrange polynomial using recursion in python (recursion limit exceeded) [closed]在python中使用递归评估拉格朗日多项式(超出递归限制)[关闭]
【发布时间】:2022-01-12 18:28:44
【问题描述】:

我有以下拉格朗日多项式:

我正在尝试使用递归来解决它,所以首先我将方程写为:

((2*n+1)/(n+1)) * x * P(n,x) - (n/(n+1)) * P(n-1,x)

我写了以下函数:

def P(n,x):
    if n == 0:
        return 1
    elif n == 1:
        return x
    else:
        return ((2*n+1)/(n+1)) * x * P(n-1,x) - (n/(n+1)) * P(n-1,x)

但我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\hp\Desktop\practical work 7\main.py", line 80, in <module>
    print (P(2,2))
  File "C:\Users\hp\Desktop\practical work 7\main.py", line 78, in P
    return ((2*n+1)/n+1) * x * P(n,x) - (n/(n+1)) * P (n-1,x)
  File "C:\Users\hp\Desktop\practical work 7\main.py", line 78, in P
    return ((2*n+1)/n+1) * x * P(n,x) - (n/(n+1)) * P (n-1,x)
  File "C:\Users\hp\Desktop\practical work 7\main.py", line 78, in P
    return ((2*n+1)/n+1) * x * P(n,x) - (n/(n+1)) * P (n-1,x)
  [Previous line repeated 995 more times]
  File "C:\Users\hp\Desktop\practical work 7\main.py", line 73, in P
    if n == 0:
RecursionError: maximum recursion depth exceeded in comparison

我不想增加允许的递归次数,除非这是解决问题的唯一方法

我认为等式是错误的,因为P(n,x) 将始终调用该函数,并且该函数将再次返回最后一次,并且它会一直这样做,我只是想知道我是否错过了什么或者问题本身是错误的。

【问题讨论】:

  • 您必须记住,您的函数将n 作为参数,但在显示的图像中,该函数将n+1 作为参数。所以你必须从图像中的每个n 中减去1
  • 您的代码和错误堆栈跟踪不匹配。
  • @PresidentJamesK.Polk 哦,是的,对不起,我没有意识到,我编辑了它
  • @ErikMcKelvey,谢谢,这对我有用,我理解我的错误,再次感谢

标签: python recursion


【解决方案1】:

试试这个:

def P(n, x):
    if n == 0:
        return 1
    if n == 1:
        return x
    return (2 * n - 1) / n * x * P(n - 1, x) - (n - 1) / n * P(n - 2, x)

例子:

>>> P(2,3)
13.0
>>> P(3,3)
63.0
>>> P(4,3)
321.0

【讨论】:

  • 谢谢。成功了!!
猜你喜欢
  • 2022-01-21
  • 2019-03-12
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
相关资源
最近更新 更多