TradingView 的 Pinescript - 为什么不允许递归?

TradingView's Pinescript - why isn't recursion allowed?

docs状态:

Pine Scipt functions do not support recursion. It is not allowed for a function to call itself from within its own code.

为什么会这样?

因为在 Pine 中,为了调用一个函数,它必须在您调用它的点上方的代码中完全定义。在递归函数中,您试图在完全定义之前调用同一个函数,因此 Pine 还“不知道”该函数。

在下面的示例中,function_a() 可以从 function_b() 中调用,因为它在编译器到达 function_b() 时已经定义,所以它在那个时候是“已知的”。

但是,function_c() 无法调用 function_d(),因为此时尚未定义,导致编译器抛出错误。

//@version=4
study(title = "Study", overlay=true)

function_a(n) => 2 * n
function_b(n) => 3 * function_a(n)
function_c(n) => 4 * function_d(n)
function_d(n) => 5 * n

plot(na)

这同样适用于递归函数,例如下面的阶乘计算。
当我们试图从自身内部调用 factorial() 函数时,该函数的定义尚未完成,因此该函数在代码中的那个点是“未知的”,导致编译器抛出一个错误。

//@version=4
study(title = "Study", overlay=true)

factorial(n) => 
    if (n <= 1)
        1
    else
        n * factorial(n-1)

plot(na)