【问题标题】:How to create recursive equations如何创建递归方程
【发布时间】:2015-10-16 14:38:30
【问题描述】:

我有一个网站,我需要让管理员按照他们的意愿创建方程式。这意味着他们可以创建如下等式:

净利润 = 毛利润 - 税收

然后创建另一个方程:

毛利润 = x + y

税收 = a - b

(其中 x、y、a 和 b 是常数)

所以它是一种递归方程。我不知道如何开始,所以任何事情都会有所帮助。

我正在使用 PHP,问题是应该如何组织表格以解决方程式中的这种依赖性。

【问题讨论】:

  • 不太清楚你要做什么......请详细说明......
  • 到底是什么问题?您应该输入有关特定问题的更多详细信息,而不仅仅是告诉您想要做什么,没有适当的标签。那应该是C#吗? javascript?爪哇?!
  • 为了明确我使用的是php,问题是应该如何组织表格以解决方程式中的这种依赖性。

标签: php algorithm laravel


【解决方案1】:

我将创建一个将变量x 与表达式y 相关联的数据结构。每个都有一个solved 标志。

然后,您可以拥有这些实体的数组,并遍历它们以查看每个实体是否可解。如果某些事情无法解决,那很好,只需继续下一个项目。每一遍都应该至少解决一个新问题,如果你在一个完整的循环中没有解决任何新问题,那么你的表达式集就无法解决(因为某些东西没有定义,或者你有一个循环依赖)。

使用这种方法可以轻松解决您提供的示例:四个常量和三个表达式将在几次迭代中解决(取决于您定义它们的顺序)。例如,下面的子集将需要两次迭代来求解,因为常量是在表达式之后定义的:

[First iteration]
Gross-profit = x + y [unsolved]
x = 10 [solved]
y = 20 [solved]

[Second iteration]
Gross-profit = 10 + 20 [solved]
x = 10 [solved]
y = 20 [solved]

您需要一个表达式求值器,它可以接受一个表达式(带有数学运算符和优先括号)和一组变量值对,并求值结果。如果表达式无效或未定义变量,您将需要它来引发异常。您可以使用 PHP 的 eval() 来实现这一点,但这种方法通常被认为是不安全的。

几乎可以肯定,执行此操作的代码已经以健壮且经过测试的形式提供。不要尝试自己编写 - 在公共存储库中搜索库。

【讨论】:

  • 您的意思是表达式求值器,类似于字符串解析器,它将用户输入解析为变量和常量?
  • 我已经更新了我的答案。可能像this library 这样的东西可能会有所帮助,描述听起来很正确。虽然没有单元测试,所以更多的搜索是值得的。
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多