递归算法:从表达式计算到回溯求解
1. 相互递归与表达式求值
在递归算法中,除了常见的方法自身调用以解决更简单问题的情况,还存在一组协作方法以递归方式相互调用的情况,这就是相互递归。下面我们将通过一个表达式求值的程序来详细探讨相互递归。
1.1 表达式语法分析
我们要计算像 3+4*5 、 (3+4)*5 、 1-(2-(3-(4-5))) 这样的算术表达式的值。由于 * 和 / 的运算优先级高于 + 和 - ,并且括号可以用来分组子表达式,计算过程会比较复杂。我们使用语法图来描述这些表达式的语法。
以表达式 3+4*5 为例,其分析过程如下:
1. 进入表达式语法图,箭头直接指向项(term),没有其他选择。
2. 进入项语法图,箭头指向因子(factor),同样没有选择。
3. 进入因子图,有两个选择:走顶部分支或底部分支。由于第一个输入标记是数字 3 而不是 ( ,所以走底部分支。
4. 接受输入标记,因为它与数字匹配。此时未处理的输入变为 +4*5 。
5. 沿着箭头从数字走到因子的末尾。就像方法调用一样,现在回溯,返回到项图中因子元素的末尾。
6. 现在有另一个选择:在项图中循环或退出。下一个输入标记是 + ,它与循环所需的
递归算法:从表达式计算到回溯求解
超级会员免费看
订阅专栏 解锁全文
751

被折叠的 条评论
为什么被折叠?



