python - 如何为 for 循环中使用的 python 函数建立索引?

标签 python function for-loop recursion indexing

我想弄清楚如何编写以下伪代码:

# Base-case
u_0(x) = x^3

for i in [0,5):
    u_(i+1)(x) = u_(i)(x)^2

例如,最终我可以调用 u_5(x)

完成上述任务时遇到的困难是找到一种通过 i 索引 Python 函数的方法,以便我可以迭代地定义每个函数。

我尝试使用两个函数的递归来代替索引,但我得到“超出最大递归深度”。

这是一个最小的工作示例:

import math
import sympy as sym

a,b = sym.symbols('x y')

def f1(x,y):
    return sym.sin(x) + sym.cos(y)*sym.tan(x*y)

for i in range(0,5):
    def f2(x,y):
    return sym.diff(f1(x,y),x) + sym.cos(sym.diff(f1(x,y),y,y))

    def f1(x,y):
        return f2(x,y)

print(f2(a,b))

最佳答案

是的,一般想法是对结果进行“索引”以避免重新计算它们。实现这一目标的最简单方法是“内存”,这意味着告诉函数记住它已经计算出的值的结果。

如果 f(i+1) 基于 f(i)(其中 i 是自然数),那么这会特别有效。

在 Python3 中,使用装饰器对 1 个变量函数执行此操作非常简单:

导入函数工具 @functools.lru_cache(最大大小=无) 定义 f(x): …… 返回 .... 想了解更多这方面的知识,您可以咨询一下 What is memoization and how can I use it in Python? 。 (如果您使用的是 Python 2.7,还有一种方法可以使用预先打包的装饰器来实现。)

您的具体情况(如果我对您的伪代码的理解是正确的)依赖于两个变量函数,其中 i 是一个整数变量,x 是一个符号(即不应该在这里解析)。所以你需要沿着 i 进行内存。

为了避免在粗暴地请求 5 的图像时破坏堆栈(不知道为什么,但毫无疑问,递归比表面上看到的要多),然后使用 for 循环来计算您的图像范围为 0 到 5(按顺序:0、1、2...)。

我希望这会有所帮助。

关于python - 如何为 for 循环中使用的 python 函数建立索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44297747/

相关文章:

python - 如何使用 Tweepy 获取特定日期的推文?

python - Django模型: creating small value fixed point

python - 使用 utf-8 编码后,在 Natural Reader 中用 ' 代替 '

c - for循环辅助+累加

python - 数组更改后立即跳出循环

python - Numpy 的 float32 和 float 比较

javascript - 随机生成的数组中的最大数

function - 函数命名困难

javascript - 更简洁的不区分大小写的测验验证

PHP:用算法简化?