• <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
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(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 閱讀(802) 評論(0)  編輯 收藏 引用 所屬分類: 我的讀書筆記
            久久精品国产精品亚洲精品| 国产精品美女久久久久久2018| 51久久夜色精品国产| 91精品日韩人妻无码久久不卡| 久久综合亚洲色HEZYO国产| 久久天天躁狠狠躁夜夜2020一| 精品久久一区二区三区| 久久中文字幕视频、最近更新| 久久久久久夜精品精品免费啦| 久久久久一本毛久久久| 久久国产精品久久精品国产| 伊人久久一区二区三区无码| 99久久久精品| 国内精品综合久久久40p| 久久精品一区二区影院 | 久久精品人人做人人爽电影蜜月 | 久久精品无码一区二区日韩AV| 午夜久久久久久禁播电影| 久久精品国产亚洲Aⅴ香蕉| 97超级碰碰碰久久久久| 亚洲国产精品无码久久SM| 一本一道久久a久久精品综合| 国产精品午夜久久| 91久久精品国产91性色也| 国产精品国色综合久久| 色综合久久无码五十路人妻| 亚洲中文字幕久久精品无码APP | 精品蜜臀久久久久99网站| 久久综合久久美利坚合众国| 欧美大战日韩91综合一区婷婷久久青草 | 久久精品麻豆日日躁夜夜躁| 国内精品久久久久影院薰衣草| 伊人情人综合成人久久网小说| 国产午夜精品久久久久九九电影| 伊人久久大香线蕉影院95| 97精品伊人久久久大香线蕉| 青青草国产精品久久| 99久久成人18免费网站| 久久影视国产亚洲| 亚洲午夜久久久久久久久电影网| 亚洲精品国产字幕久久不卡|