• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 181  文章 - 15  trackbacks - 0
            <2007年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            My Tech blog

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                    數據結構上面在講到棧的時候,順便提了一下遞歸。實際上遞歸就是用棧來實現的。在很多算法書上,對于一些用遞歸方式寫成的算法,相應的也給出了棧的算法。這里我要把fibonacci數列分別用遞歸和棧的方式寫出來,由于我以前的算法教材丟失了,而數據結構中也沒有給出相應的偽碼,所以只有自己從頭寫起了。
                    首先是fibonacci的遞歸寫法(不是很標準,但是很親切):
            int fib(int value)
            {
                
            if(0==value)
                    
            return 0;
                
            else
                    
            if(1==value)
                        
            return 1;
                    
            else
                    {
                        
            return fib(value-1)+fib(value-2);
                    }
            }
                    接下來要把這個算法轉換為使用棧的寫法。
                    首先進行一下分析。遞歸是逆向求結果的,對于不能求出結果的函數,先將運行場景壓棧,然后遞歸調用自己,如果仍然不能出結果,就再將運行場景壓棧,一直到函數可以返回結果為止。此時依次將運行場景彈棧,完成運行場景,取得返回值,再彈棧......印象中的遞歸調用過程就是如此。如果我們要自己寫遞歸求fibonacci數列,就要自己手動用程序來模擬這個過程。我首先準備一個棧來存放結果序列。在這個結果序列里面,保證第一個結果和第二個結果總是可以直接求得的數值。因為只需要n-1和n-2便能求出fib(n),所以我們在算法中要把多余的n-3彈出,這樣棧內的元素個數在每一次調用的過程中逐漸減少,一直到里面只剩下一個元素,在這個時候,剛才彈出的兩個元素之和就是我們要求的fibonacci(n)。
                    下面是算法:
            int fibByStack(int value)
            {
                
            int currentValue;
                currentValue
            =value;
                
            while(currentValue>=0)
                {
                    fibStack.push(currentValue);
                    currentValue
            --;
                }
                fibStack.pop();
                fibStack.pop();
                //1和0是n=1和n=0時的值,為了強調壓入的是“結果”,我將頭兩個元素彈出再壓入這兩個值
                fibStack.push(
            1);
                fibStack.push(
            0);
                
            while(true)
                {
                    
            int topValue1,topValue2
                    topValue1
            =fibStack.top();
                    fibStack.pop();
                    topValue2
            =fibStack.top();        
                    fibStack.pop();
                    
            if(1==fibStack.size())
                        
            return topValue1+topValue2;
                    fibStack.pop();        
                    fibStack.push(topValue1
            +topValue2);
                    fibStack.push(topValue2);
                }
            }
            posted on 2007-06-17 17:19 littlegai 閱讀(795) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
            一级做a爰片久久毛片毛片| 国产精品久久久久久搜索| 久久久久一级精品亚洲国产成人综合AV区| 久久96国产精品久久久| 久久久久亚洲AV无码专区桃色| 热久久视久久精品18| 久久久久久综合一区中文字幕 | 伊人久久精品线影院| 久久久受www免费人成| 久久ZYZ资源站无码中文动漫| 久久久久久毛片免费看| 国产精品一久久香蕉产线看| 久久精品国产亚洲av麻豆图片| 久久久综合九色合综国产| 伊人久久精品无码二区麻豆| 久久久久99精品成人片牛牛影视| 久久天天躁狠狠躁夜夜avapp| 久久综合视频网站| 99精品伊人久久久大香线蕉| 久久精品国产亚洲AV无码娇色 | 99久久免费国产精品特黄| 久久亚洲高清观看| 91精品国产高清久久久久久io | 久久永久免费人妻精品下载| 2021国内久久精品| 久久99精品国产麻豆婷婷| 天天综合久久久网| 久久九九亚洲精品| 久久这里只有精品久久| 久久精品国产久精国产思思| 久久婷婷成人综合色综合| 久久久久久九九99精品| 久久99国产乱子伦精品免费| 无码国内精品久久人妻| 久久婷婷五月综合成人D啪| 久久亚洲日韩看片无码| 久久天天躁夜夜躁狠狠躁2022| 大香伊人久久精品一区二区| 亚洲欧美国产精品专区久久| 久久亚洲日韩看片无码| 久久精品天天中文字幕人妻|