首页 > 编程知识 正文

递归下降反汇编算法(平均下降率怎么计算)

时间:2023-05-05 07:42:03 阅读:74495 作者:4035

递归下降算法

算法模型:

Term=Term Expr

Expr=Expr Factor

Factor=单个元素。 最小单位。

实现原理:

程序进入算法,被视为项,分解为项和表达式的形式,表达式分解为表达式和因子的形式,因子是该算法中的最小单位。

上一级呼叫比自己强壮的鸭子级别的自己。 在此分离为三层后,形成于下层模型的优先顺序变高。

用递归下降算法写了一个简单的计算机。 递归算法对我的运算符号- * /等基础运算符号进行优先排序。 在使用中发现了递归下降算法中最容易出现的问题之一,左递归问题。 接下来,我将详细说明这个问题和解决方案。

什么是左递归?

举个例子,1-2 1正确答案为0,如果给出了左递归回答,则为-2。

所谓左递归,实际上是在进行式为同一级别的运算符的运算时,强行从右向左进行运算分析的结果。 递归下降法中,后面生成的运算符的优先顺序越高,因此同一级别的运算无法确保优先顺序。 这里所示的是公式从右向左进行了分析。

简单来说,就是尽管应该是相同的优先顺序,但根据所生成的优先顺序从右到左仍然存在优先顺序。

左递归很容易被忽略。 如果不确定并测试出现错误的公式,这个错误就不会出现。 整个程序看起来运行完美,没有破产。 但是,实际上整个计算公式的计算顺序有问题。

左递归解决方案:

解决左递归,就是解决公式的解析方式,从左到右解析公式,但只要能正确形成符号的优先顺序即可。

物理模型图比较:

左递归时生成的节点:

公式1 ̄2 ̄4中,后生成的优先级高于前生成的优先级,因此在左递归中,先计算2 ̄4。 否则会导致错误。

解决方案:

抽象运算符号并单独创建图层,将所有数值节点存储在向量中。 这样,实际生成内存时,只有4个需要确定优先级- * /。 因为递归降低算法,所以在-的下一个子类中生成* /可以确保他们的优先级正确。

物理模型包括:

这样用编程的方法解决了符号优先顺序的问题。 当然也可以通过算法优化来解决这一系列问题。 哈哈~! 我做不到。

为了说明这个解决方案:

内存中只出现4个- * /的运算符号,NumberNode都存储在Vector中,调用STL算法依次取出NumberNode进行计算即可。

思路就是这个思路,实现代码以后更新。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。