逆波蘭表達式的遞歸計算


題目:用遞歸求解逆波蘭表達式的結果(數字符號之間都用空格隔開)

逆波蘭表達式:

比如說:(2+3)*4 -> * + 2 3 4

比如說 * + 11 12 + 24 35 -> (24+ 35)*(11 + 12) = 1357

 

前提知識:

atof函數能把char型轉換成浮點數

atof():double atof(const char *str )

 

思路:

向字符串數組輸入,分兩種情況,1,是符號,2,是數字

(向字符串數組輸入時如果遇到空格會停止)

所以如果時第一種情況char 數組只會有c[0]這個位置

而輸入的浮點數則會占據幾個位置

然后開始遞歸

如果是第一種情況,符號,則引出下一次遞歸

如果是第二種情況,數字,則直接return

難點:不能考慮一次輸完之后再考慮,要便輸入邊計算

#include<bits/stdc++.h>
using namespace std;
int bolan()
{
    char c[10];
    cin>>c;
    switch(c[0])
    {
        case'+':return bolan()+bolan();
        case'-':return bolan()-bolan();
        case'*':return bolan()*bolan();
        case'/':return bolan()/bolan();
        default:return atof(c);
        break;
    }
}

int main()
{
    cout<<bolan()<<endl;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM