我觉得这是一个非常愚蠢的问题,但我找不到答案。
假设我们要评估一个后缀表达式,该表达式包含具有不同arity的各种运算符(例如ADD,SUB和其他可以使用N
个操作数的运算符)。评估使用这些运算符构建的后缀表达式需要多少堆栈内存(就元素数量而言)?
有没有办法确定所需的内存量?
编辑:似乎这个问题有点含糊不清。我要问的是,这种操作需要的堆栈元素的最大数量是多少?甚至可以计算它还是可以无限多并且取决于表达式?答案 0 :(得分:1)
没有固有的最大值。这完全取决于您正在评估的表达方式。
答案 1 :(得分:1)
这取决于表达方式。二进制表达式的经典递归解决方案类似于(在C代码中):
int maxstack(expression *exp) {
if (IsLeaf(exp)) {
return 0;
} else {
int left_stack = maxstack(exp->left);
int right_stack = maxstack(exp->right);
if (left_stack == right_stack)
return left_stack + 1;
else if (left_stack > right_stack)
return left_stack;
else
return right_stack;
}
}
将此扩展为三元/一元表达式是相对简单的