【发布时间】:2017-11-02 00:35:18
【问题描述】:
我想弄清楚如何编写以下伪代码:
# 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))
【问题讨论】:
-
你的问题太模糊了,u_i(x)是函数还是变量?
-
你能展示你真正想要做什么吗?递归是解决问题的自然方法。如果深度太大,您可以使用显式堆栈。
-
一步(直接到基本情况)并不深。您是否调试了程序以验证您没有意外地进行无限递归?无论如何,递归(或显式堆栈版本)似乎是解决方案。请包括MCVE 以澄清。
-
u_(i)(x) = u_0(x)^(2^i)为什么这里需要递归或任何循环? -
@user46944:您的示例需要最小化、完整且可验证。 :) 请花几分钟将您现有的程序分割成最小的 Python 脚本来重现错误,并编辑您的问题以包含它。理想情况下,人们可以复制它并在本地运行它。当您删除程序的不相关部分时,您通常会自己发现问题。
标签: python function for-loop recursion indexing