gpt4 book ai didi

recursion - 重新分配函数并避免在 Julia 中进行递归定义

转载 作者:行者123 更新时间:2023-12-04 15:13:18 25 4
gpt4 key购买 nike

我需要对一系列函数进行操作

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)。不幸的是,我不知道如何在 Julia 中执行此操作而不与 g(x) 的递归定义的语法冲突。确实,

f(x) = x^2
g(x) = x
for i=1:2
global g(x) = g(x) + f(g(x))
println(g(1))
end

导致 StackOverflowError。

在 Julia 中,使用之前的定义重新定义 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 是一个循环局部变量,它在每次迭代时都获得一个新的绑定(bind),而 g 在循环外部。

您还可以查看 this section Julia 手册。

关于recursion - 重新分配函数并避免在 Julia 中进行递归定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64801924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com