递归-中项表达式求解

2020-08-15 17:15发布

题外话:

某天晚上梦见更了五六篇博客而不知疲惫.

如果这是现实该多好啊哈哈哈!美梦成真吧!

 

中项表达式就是最普通的表达式.也是几个小定义来回递归.这个题在去年期末上机题中出现过,但是比这个还有难一些.

呜呜呜,去年的我啥都不会(当然现在也是),为难我干什么呀!!!!

 

 

解:

 

 

 

 

 

 1 #include <iostream>
 2 using namespace std;
 3 /*
 4  * 感觉脑子有坑x10086
 5  * 
 6  * 
 7  * 
 8  * 首先前两个是需要循环的,因为有连加的情况,
 9  * 而最后一种不用,括号里面直接就是一个新的表达式
10  * 
11  * 其次注意返回值,,,
12  * 
13  * 因为可能没有+-*/所以result 上来就是??_value的值,就不要先搞个sum=0 return sum这个玩意了
14  */
15 int term_value();
16 int factor_value();
17 int expreesion_value(){
18 
19     int result = term_value();
20     while(1){
21         char op=cin.peek();//查看第一个字符但是不取走
22         if(op=='+'||op=='-'){
23             if(op=='+') {
24                 cin.get();//取走一个字符
25                 int value = term_value();
26                 result = result + value;
27             }
28             else{
29                 cin.get();//取走一个字符
30                 int value = term_value();
31                 result = result - value;
32             }
33 
34         }
35         else{
36             break;
37         }
38     }
39     return result;
40 }
41 int term_value(){
42 
43     int result = factor_value();
44     while(1){
45         char op=cin.peek();
46         if(op=='*'||op=='/'){
47             if(op=='*') {
48                 cin.get();
49                 int value = factor_value();
50                 result = result *value;
51             }
52             else{
53                 cin.get();
54                 int value = factor_value();
55                 result = result / value;
56 
57             }
58         }
59         else{
60             break;
61         }
62     }
63     return result;
64 
65 }
66 int factor_value(){
67     int result=0;
68 
69 
70         char op = cin.peek();
71         if (op == '(') {
72             cin.get();
73             result = expreesion_value();
74             cin.get();
75         } else {
76             while (isdigit(op)) {
77                 result = result * 10 + op - '0';//计算整数
78                 cin.get();
79                 op = cin.peek();
80             }
81         }
82 
83         return result;
84     }
85 
86 
87 
88 
89 
90 
91 int main(){
92     cout<<expreesion_value();
93 
94 }

 

标签: