【发布时间】:2016-10-23 13:24:56
【问题描述】:
我在队列中有一些元素(例如/ - 4 2 + 4 5)。
需要计算为(4-2)/(4+5)。有人可以向我解释
递归算法?
【问题讨论】:
标签: c algorithm data-structures
我在队列中有一些元素(例如/ - 4 2 + 4 5)。
需要计算为(4-2)/(4+5)。有人可以向我解释
递归算法?
【问题讨论】:
标签: c algorithm data-structures
您尝试理解polish notation,它是逻辑、算术和代数的一种符号形式。
将数字 4 和 5 相加的表达式在前缀/抛光符号中写成 + 4 5 而不是 4 + 5。
数字 4 和 2 相减的表达式在前缀/抛光符号中写成 - 4 2 而不是 4 - 2。
然后,可以组合操作。 op3 (op1 m1 n1) (op2 m2 n2),可以解释为(m1 op1 n1) op3 (m2 op2 n2),其中op1、op2、op3可以是+、-、*、/。
括号是可选的,前面的波兰符号可以写成
op3 op1 m1 n1 op2 m2 n2
理解它的最简单方法是使用树。树还将帮助您更好地理解用于评估此类符号的递归算法。在这样的树上,任何操作都会被认为是一个节点,数字就是叶子。
要计算一个表达式,需要:
【讨论】:
(4-2)/(4+5) 视为一棵树。 /是树的根,-和+是连接到/的顶点,4和2是连接到-的顶点,4和@98765434@是连接到+ 的顶点。然后注意树的内部节点是运算符,叶子是数字。然后,您可以通过使用递归函数以深度优先搜索方法评估树来计算表达式。