递归的作用:
1) 替代多重循环
2) 解决本来就是用递归形式定义的问题
3) 将问题分解为规模更小的子问题进行求解
....
这次我们用递归来解决递归形式的问题。
逆波兰表达式问题:
逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 +3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。输出为一行,即表达式的值。
样例输入
* + 11.0 12.0 + 24.0 35.0
样例输出
1357.000000
提示:(11.0+12.0)*(24.0+35.0)
逆波兰表达式的定义的分析:
1) 一个数是一个逆波兰表达式,值为该数
2) "运算符 逆波兰表达式 逆波兰表达式" 是逆波兰表达式 ,值为两个逆波兰表达式的值运算的结果
递归解决:
#include<iostream>
#include<cstdio> //printf()
#include<cstdlib> //atof()
using namespace std;
double exp(){ //读入一个逆波兰表达式,并计算其值
char s[20];
cin >> s; //读入一个表达式
switch(s[0]){
case '+': return exp() + exp(); //当前是+号,递归进行加运算
case '-': return exp() - exp();
case '*': return exp() * exp(); //当前是*号,递归进行乘运算
case '/': return exp() / exp();
default: return atof(s); break; //当前是一个数,将字符串转换成浮点数
}
}
int main(){
printf("%lf",exp());
return 0;
}

本文介绍了一种使用递归方法解析并计算逆波兰表达式的C++实现方案。通过递归调用处理运算符和操作数,文章提供了一个完整的示例程序,展示了如何根据输入的逆波兰表达式计算出其数值。

1352

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



