1. 程式人生 > 實用技巧 >遞迴-中項表示式求解

遞迴-中項表示式求解

題外話:

某天晚上夢見更了五六篇部落格而不知疲憊.

如果這是現實該多好啊哈哈哈!美夢成真吧!

中項表示式就是最普通的表示式.也是幾個小定義來回遞迴.這個題在去年期末上機題中出現過,但是比這個還有難一些.

嗚嗚嗚,去年的我啥都不會(當然現在也是),為難我幹什麼呀!!!!

解:

 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 }