表达式求值(递归算法)

来源:互联网 发布:尚学堂官网 java 编辑:程序博客网 时间:2024/06/17 19:05

问题描述:见下图


程序代码:

/* *题目描述:表达式求值(递归算法)        表达式:1、可以是一个项                2、也可以由多个项通过加减构成        项:1、项本身可以是一个因子            2、项也可以由若干个因子通过乘除组成        因子:1、因子本身可以是一个数字              2、因子也可以由表达式加上括号组成 */ #include <iostream> #include <cstring> #include <cstdlib> using namespace std; int factor_value();//读入一个因子并且返回其值 int term_value();//读入一项的并且返回其值 int expression_value();//读入一个表达式并返回值 int main() {     cout<< expression_value() <<endl;     return 0; } int expression_value()//读入一个表达式并返回值 {     int result = term_value();//求第一项的值     bool more = true;     while( more)     {         char op = cin.peek();//看一个字符不取走         if( op == '+'|| op == '-')         {             cin.get();//从输入流中取走一个字符('+'或者'-')             int value = term_value();//读入下一个项             if(op == '+')                result +=value;             else                result -= value;         }         else            more = false;     }     return result; } int term_value()//读入一项的并且返回其值 {     int result = factor_value();//读入一个因子     while(true)     {         char op = cin.peek();//取出一个字符判断还有没有因子         if(op== '*'||op == '/')         {             cin.get();             int value = factor_value();//读入下一个因子             if(op == '*')                result *=value;             else                result /=value;         }         else            break;     }     return result; } int factor_value()//读入一个因子并返回值 {     int result = 0;     char c = cin.peek();//取出一个字符判断输入流中是一个因子还是一个整数     if( c =='(')     {         cin.get();//去掉左括号         result = expression_value();//读入表达式         cin.get();//去掉右括号     }     else//是一个数字     {         while(isdigit(c))//求出数字的值         {             result = 10 * result +c- '0';             cin.get();             c= cin.peek();         }     }     return result; }
运行结果:



0 0