无法弄清楚递归函数

时间:2013-05-01 16:04:21

标签: python recursion

我有这段代码来计算给定点的函数的一阶和二阶导数

def yy(x):
   return 1.0*x*x

def d1(func, x ,e):
    x = x
    y = func(x)
    x1 = x + e
    y1 = func(x1)
    return 1.0*(y - y1)/(x - x1)

def d2(func ,x, e):
    x = x
    y = d1(func, x, e)
    x1 = x + e
    y1 = d1(func, x1, e)
    return 1.0*(y - y1)/(x - x1)

yy是实际的功能。 d1和d2用于计算第一和第二导数。他们是我对优化感兴趣的人。正如您所看到的,它们都具有几乎相同的代码。我基本上可以继续为第3,第4等衍生函数编写函数,但是我想知道是否可以将它作为单个函数编写,将衍生级别指定为参数。

2 个答案:

答案 0 :(得分:4)

def deriv(func, order, x, e):
    if order < 0: raise ValueError
    if order == 0: return func(x)
    y = deriv(func, order-1, x, e)
    x1 = x + e
    y1 = deriv(func, order-1, x1, e)
    return float(y - y1)/(x - x1)

order = 1给出一阶导数,order = 2给出第二个,依此类推。

答案 1 :(得分:1)

试试这个,其中lvl是派生级别。

def d(func, x ,e, lvl):
    x1 = x + e

    if lvl == 1:
        x = x
        y = func(x)
        y1 = func(x1)
        return 1.0*(y - y1)/(x - x1)
    else:
        return 1.0*(d(func, x, e, lvl-1) - d(func, x1, e, lvl-1) )/(x-x1)