Recursion 重新分配函数并避免Julia中的递归定义
我需要对一系列功能进行操作 h_k(x)=(I+f_k())^k g(x) 对于每个k=1,…,N 下面是一个基本示例(N=2,f_k=f):Recursion 重新分配函数并避免Julia中的递归定义,recursion,julia,Recursion,Julia,我需要对一系列功能进行操作 h_k(x)=(I+f_k())^k g(x) 对于每个k=1,…,N 下面是一个基本示例(N=2,f_k=f): f(x) = x^2 g(x) = x h1(x) = g(x) + f(g(x)) h2(x) = g(x) + f(g(x)) + f(g(x) + f(g(x))) println(h1(1)) # returns 2 println(h2(1)) # returns 6 我需要把它写在一个循环中,最好在每次迭代中重新定义g(x)。不幸的是,我不
f(x) = x^2
g(x) = x
h1(x) = g(x) + f(g(x))
h2(x) = g(x) + f(g(x)) + f(g(x) + f(g(x)))
println(h1(1)) # returns 2
println(h2(1)) # returns 6
我需要把它写在一个循环中,最好在每次迭代中重新定义g(x)。不幸的是,我不知道如何在Julia中做到这一点,而不与g(x)的递归定义的语法相冲突。的确
导致堆栈溢出错误
在Julia中,使用g(x)以前的定义,重新定义g(x)的正确方法是什么?
另外,对于那些认为这个问题可以用递归解决的人:我想使用For循环,因为函数f_k(x)(在上面,每个f_k=f)是如何在这个问题的实际问题中计算出来的。我不确定它是否是最好的,但一种自然的方法是在这里使用匿名函数,如下所示:
let
f(x) = x^2
g = x -> x
for i=1:2
l = g
g = x -> l(x) + f(l(x))
println(g(1))
end
end
还是像这样
f(x) = x^2
g = x -> x
for i=1:4
l = g
global g = x -> l(x) + f(l(x))
println(g(1))
end
(我更喜欢使用let
的前一个选项,因为它避免使用全局变量)
问题在于,l
是一个循环局部变量,它在每次迭代时都会获得一个新的绑定,而g
是循环的外部变量
你也可以查阅朱莉娅手册
f(x) = x^2
g = x -> x
for i=1:4
l = g
global g = x -> l(x) + f(l(x))
println(g(1))
end