• <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∨免费久久| 久久99精品久久久久久hb无码| 精产国品久久一二三产区区别| 乱亲女H秽乱长久久久| 亚洲色欲久久久综合网东京热| 久久久久国色AV免费看图片| 久久婷婷五月综合色99啪ak| 欧美日韩中文字幕久久久不卡| 麻豆一区二区99久久久久| 久久99热只有频精品8| 国产精品毛片久久久久久久| 中文字幕久久精品| 99久久精品国产综合一区| 久久久亚洲欧洲日产国码是AV| 91久久精品91久久性色| 一本大道久久东京热无码AV | 999久久久国产精品| 久久综合久久性久99毛片| 久久99精品久久久久子伦| 国产农村妇女毛片精品久久| 久久精品国产99久久无毒不卡| 久久精品国产乱子伦| 久久99中文字幕久久| 久久精品人成免费| 亚洲国产小视频精品久久久三级| 91久久精品国产91性色也| 亚洲av日韩精品久久久久久a| 色偷偷88欧美精品久久久| 狠狠色丁香久久婷婷综合五月 | 人妻无码精品久久亚瑟影视| 久久人人爽人人爽人人AV| 超级碰碰碰碰97久久久久| 久久久久久亚洲精品无码| 999久久久无码国产精品| 久久夜色精品国产网站| 亚洲va久久久噜噜噜久久狠狠| 一本久久综合亚洲鲁鲁五月天| 久久精品国产亚洲Aⅴ香蕉| 97久久香蕉国产线看观看| 国产亚洲精品自在久久|