【问题标题】:Python recursive function definition storage issuePython递归函数定义存储问题
【发布时间】:2023-03-14 08:12:01
【问题描述】:

我试图通过存储数学系列的每个步骤来获取递归定义的函数列表: x^0+x^1+x^2+x^3+...f0(x)=1, f1(x)=1+x, f2(x)=1+x+x², f3(x)=1+x+x²+x³, ...

我在 python 中编写了这个代码:

n = 3
devs = [lambda x: 1]
for k in range(n):
    devs.append(lambda x, f=devs[k]: f(x) + x**(k+1))
print(devs[-1](4))  # x=4

我在this answer 中了解到,您需要将前一个函数作为默认参数传递以解决最大递归深度错误,但这会输出193
我认为这与默认参数中的k 有关。似乎计算:1+4^3+4^3+4^3=193,或者更准确地说是1+n*x^n而不是x^0+x^1+...+x^n

你能告诉我我在这里做错了什么吗?

【问题讨论】:

    标签: python recursion math lambda


    【解决方案1】:

    我认为您链接的同一个问题可以解决您的问题。因为函数内部的 k 仅在循环外部进行评估,所以它将具有循环中的最后一个值。您可以查看the documention 以了解它是如何深入工作的。 正确的代码是

    n = 4
    devs = [lambda x: 1]
    for k in range(n):
        devs.append(lambda x, f=devs[k], j=k: f(x) + x**(j+1))
    

    【讨论】:

      【解决方案2】:

      一个班轮只是为了好玩!

      n=10
      devs = (lambda f:[f] + [f := (lambda x, a=k, g=f: g(x) + x**(a+1)) for k in range(n)])(lambda x:1)
      

      【讨论】:

        猜你喜欢
        • 2022-01-07
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-18
        相关资源
        最近更新 更多