它存储在数组中,因此 2+3^2 将表示为:
\n["+", 2, ["^2", 3] ]\nRun Code Online (Sandbox Code Playgroud)\n为了实际评估树,我有一个递归函数
\nfunction evaluate(mathstructure::Array)\n if mathstructure[1] == "+"\n # do the operation\n evaluate(mathstructure[2]) + evaluate(mathstructure[3])\n elseif mathstructure[1] == "*"\n # do the operation\n evaluate(mathstructure[2]) * evaluate(mathstructure[3])\n elseif mathstructure[1] == "\xcf\x83"\n # do the operation\n x = evaluate(mathstructure[2])\n 1 / (1 + exp(-x))\n elseif mathstructure[1] == "^2"\n # do the operation\n x = evaluate(mathstructure[2])\n x^2\n end\nend\nfunction evaluate(mathstructure::Variable)\n mathstructure.value\nend\n\nRun Code Online (Sandbox Code Playgroud)\n(我实际上有一个Variable结构,它有一个值和一个标识符来表示数字,所以我可以稍后更改常量)
这段代码可以工作,但是速度非常慢。我应该采取哪些步骤来优化其性能?我无法使用尾递归,因为该函数通常会调用其自身两次。
\n谢谢你!
\n-迭戈
\n