遞迴 之 逆波蘭表示式

2021-07-23 15:39:14 字數 758 閱讀 1486

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括 +  -  *  /  四個。

輸入資料

輸入為一行,其中運算子和運算數之間都用空格分隔,運算數是浮點數

輸出要求

輸出為一行,表示式的值。 

輸入樣例

* + 11.0 12.0 + 24.0 35.0

輸出樣例

1357.000000

解題思路

這個問題看上去有些複雜,如果只是簡單地模擬計算步驟不太容易想清楚,但是如果用遞迴的思想就非常容易想清楚。讓我們根據逆波蘭表示式的定義進行遞迴求解。在遞迴函式中,針對當前的輸入,有五種情況:1)輸入是常數,則表示式的值就是這個常數;2)輸入是』+』,則表示式的值是再繼續讀入兩個表示式並計算出它們的值,然後將它們的值相加;3)輸入是』-』;4)輸入是』*』; 5)輸入是』/』;後幾種情況與2)相同,只是計算從』+』變成』-』,』*』,』/』。  

#include #includedouble exp()

}void main()

問題一:不適應遞迴的思路,直接分析輸入的字串,試圖自己寫進棧出棧的程式,寫得邏輯複雜後,因考慮不周出錯;

問題二:不會是用atof()函式,自己處理浮點數的讀入,邏輯複雜後出錯。 

遞迴 逆波蘭表示式

中置表示式 1 2 3 前置 1 2 3 後置 1 2 3 這道題說逆波蘭表示式是前置就前置吧,題意就是輸入一行,其中運算子和運算數直接都用空格分開,輸出乙個表示式的值。思路就是用遞迴的思想,首先需要寫出逆波蘭表示式的定義 1 乙個數是乙個逆波蘭表示式,值為該數。2 運算子 逆波蘭表示式 逆波蘭表示...

(遞迴)逆波蘭表示式

例題 逆波蘭表示式 逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的 表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算 符之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括 四個。輸入輸入為一行...

遞迴之逆波蘭表示式(字尾表示式)

描述不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,不再考慮運算子的優先規則,如 2 1 3 即2 1 3 這樣的表示式稱為字尾表示式,也叫逆波蘭表示式。它是為了方便在計算機中進行表示式求值而出現的。給出乙個僅由整數 等組成的字尾表示式,符號之間用空格分開,...