中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

AJPFX:遞歸與非遞歸之間的轉(zhuǎn)化

在常規(guī)表達式求值中:
輸入為四則運算表達式,僅由數(shù)字、+、-、*、/ 、(、) 組成,沒有空格,要求求其值.
我們知道有運算等級,從左至右,括號里面的先運算,其次是* 、/,再是+、- ;
這樣我們就可以用遞歸來表達這
     這樣就可以用遞歸來描述了
1.   3  
4.    總結(jié)下遞歸的優(yōu)缺點:
    優(yōu)點:直接、簡捷、算法程序結(jié)構(gòu)清晰、思路明了。
    缺點:遞歸的執(zhí)行過程很讓人頭疼。

 

成都創(chuàng)新互聯(lián)專注于桂陽企業(yè)網(wǎng)站建設,自適應網(wǎng)站建設,商城建設。桂陽網(wǎng)站建設公司,為桂陽等地區(qū)提供建站服務。全流程按需求定制開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

下面我們就用棧來替代上面的遞歸程序:
首先理解棧的概念:棧是一種應用范圍廣泛的數(shù)據(jù)結(jié)構(gòu),適用于各種具有“后進先出”特性的問題。

 

棧與過程調(diào)用:
  1.考慮下面三個過程:
     public void A1(){
     begin :
      ........   
      r: b();
     .........
      endl ;
     }
     public void A2(){
       begin :
      ........   
      t: c();
     .........
      endl ;
      }
      public void A3(){
           begin :
            ........   
           endl ;
      }
過程A1在其過程體的某一處調(diào)用過程A2,A2以在其過程體的某一處調(diào)用過程A3,A3不調(diào)用其他過程。
當過程A1執(zhí)行到的r處時,它自己實際上被"掛起來,而被調(diào)用過程A2開始運行。一直等到A2執(zhí)行完畢這后才返回過程A1的r1處繼續(xù)執(zhí)行A1剩下部分。 在過程A2的上述運行中,由于調(diào)用了A3,A2同樣在t處"掛"起并一直等到A3執(zhí)行結(jié)束后返回t1處才能繼續(xù)執(zhí)行后繼語句。

 


3.相應工作棧的變化
    遇到一個過程調(diào)用便立刻將相應的返回位置(及其它有用的信息)進棧;每當一被調(diào)用過程執(zhí)行結(jié)束時,工作棧棧頂元素下好是此過程的返回位置。
就以上面的常規(guī)表達式為例:
        例: 1+(3-2)*4/2  
步驟       OPTR棧       OPND棧      輸入字符      主要操作
1           #                          1          PUSH(OPND,'1')
2           #             1            +          PUSH(OPTR,'+')
3           #+            1            (          PUSH(OPTR,'(')
4           #+(           1            3          PUSH(OPND,'3')
5           #+(           13           -          PUSH(OPTR,'-')
6           #+(-          13           2          PUSH(OPND,'2') 
7           #+(-          132          )          operate('3','-','2') 
8           #+(           11                      POP(OPTR){消去一對括號} 
9           #+            11           *          PUSH(OPTR,'*')
10          #+*           11           4          PUSH(OPND,'4')
11          #+*           114          /          operate('1','*','4')
12          #+            14                      PUSH(OPTR,'/')
12          #+/           14           2          PUSH(OPND,'2')
13          #+/           142          #          PUSH(OPND,'#')        
14          #+/           142                     operate('4','/','2')
15          #+            12                      operate('1','+','2')
16          #               3                       return(GetTop(OPND));

 

4.為什么要學習遞歸與非遞歸的轉(zhuǎn)換方法:
并不是每一門語言都支持遞歸的
有助于理解遞歸的本質(zhì)
有助于理解棧,樹等數(shù)據(jù)結(jié)構(gòu)
一般來說,遞歸時間復雜度和對應的非遞歸差不多,但是遞歸的效率是相當?shù)?,它主要花費在反復的進棧出棧,各種中斷等機制上,更有甚者,在遞歸求解過程中,某些解會重復的求好幾次。

 

5.遞歸與非遞歸轉(zhuǎn)換的原理
簡單遞歸一般就是根據(jù)遞歸式來找出遞推公式,即引入循環(huán)、遞歸調(diào)用樹來模擬遞歸
復雜遞歸一般就是模擬系統(tǒng)處理遞歸的機制,使用?;蜿犃械葦?shù)據(jù)結(jié)構(gòu)保存回溯點來求解。

 

舉個例子:在快速排序中,就可以清晰的理解其中的道理。
我還是用Java還舉這個例子吧,不用G++了
1.用遞歸實現(xiàn)快速排序
  2.用棧實現(xiàn)快速排序

網(wǎng)頁名稱:AJPFX:遞歸與非遞歸之間的轉(zhuǎn)化
瀏覽地址:http://www.rwnh.cn/article36/jipdpg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、用戶體驗、Google、域名注冊、云服務器、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
迁西县| 夏河县| 文登市| 泰宁县| 台州市| 汾西县| 滨海县| 海城市| 青田县| 井冈山市| 准格尔旗| 兴城市| 察隅县| 桂东县| 育儿| 玉门市| 平阴县| 巴塘县| 宁河县| 汝南县| 武平县| 桓台县| 东丽区| 独山县| 永靖县| 东台市| 建始县| 平度市| 甘肃省| 百色市| 江都市| 长垣县| 建瓯市| 西安市| 莱阳市| 略阳县| 盐池县| 博兴县| 全州县| 新化县| 绍兴市|