• <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>

            5D空間

            學習總結與經驗交流

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

              如題,利用非遞歸辦法解決a(n) = r1*a(n-1) + r2*a(n-2)問題。其中斐波那契數列即為r1 = r2 = a1 = a2 = 1的特例。
              函數支持兩種版本的調用,一種是完全版,一種是簡潔版。完全版需要5個參數r1 r2 a1 a2 n,簡潔版只需要一個參數n。具體使用方法見代碼注釋。

            /*********************************************************************************
             *名稱:LHRODT.h
             *版本號:0.1
             *作者:趙耀(中山大學2010級)
             *時間:2011.4.4
             *簡介:
             *        linear homogeneous relation of degree two的計算函數.形如: 
             *            a(n) = r1*a(n-1) + r2*a(n-2)
             *    這樣的遞歸數列,只需調用函數
             *            LHRODT( r1, r2, a1, a2, n )
             *    即可返回數列的第a(n)項(r1,r2,a1,a2均為double類型,n為int類型,返回類型為double).
             *    這里r1,r2為公式中r1,r2,而a1,a2為數列的頭兩項,n為第幾項.函數帶緩存功能,即第一次
             *    調用后,下次調用可以只輸入
             *            LHRODT( n )
             *    .
             *
             *未完成特性:
             *    1.不含有數據檢測功能,如果輸入的數據無解,則會返回0.
             *    2.簡潔版的調用不包含條件檢測機制,如果不滿足條件依然會調用,但是返回0.
             *    3.未含有范圍檢測功能,如果數據函數結果增長很快,有可能出現數據溢出而沒有任何提示.
             *已知bug:
             *    1.無法處理無解數據的輸入.
             *    2.簡潔版在未調用完全版或者完全版調用失敗的情況下只返回0.
             *    3.可能在沒有任何提示的情況下出現數據溢出.
             *版權信息:
             *        該代碼為開源代碼,原作者保留其所有權.你可以拷貝,修改,使用該代碼,但是請保留必
             *    要的版權信息.
             ********************************************************************************
            */


            #ifndef LHRODT_H
            #define LHRODT_H
            #include 
            <cmath>
            using std::pow;

            class fsLHRODT //fs = function support
            {
            public:
                fsLHRODT();
                
            double operator()( doubledoubledoubledoubleint );
                
            double operator()( int );

            private:
                
            double x1; //x1 x2 u1 u2 det 均為計算過程的中間變量
                double x2; //result 為最后結果的臨時儲存
                double u1;
                
            double u2;
                
            double det;
                
            double result;
                
            bool flag; //標記完全版的函數是否被調用過
            }
            ;

            fsLHRODT::fsLHRODT()
                : x1( 
            0 ), x2( 0 ), u1( 0 ), u2( 0 ), det( 0 ), result( 0 ), flag( false )
            {
            }


            double fsLHRODT::operator()( double r1, double r2, double a1, double a2, int n )
            {
                flag 
            = true;
                det 
            = r1*r1 + 4*r2;

                
            if ( det < 0 ) //det小于0說明輸入的數據不合法,不能按照公式計算,并且下次不能直接調用簡潔版函數
                {
                    flag 
            = false;
                    
            return 0;
                }

                
            else if ( det > 0 )
                
            {
                    det 
            = sqrt( det );
                    x1 
            = ( r1 + det ) / 2;
                    x2 
            = ( r1 - det ) / 2;
                    u1 
            = ( a1*x2 - a2 ) / ( x1*( x2 - x1 ) );
                    u2 
            = ( a2*x1 - a1 ) / ( x2*( x1 - x2 ) );
                    result 
            = u1*pow( x1, n ) + u2*pow( x2, n );
                    
            return result;
                }

                
            else
                
            {
                    x1 
            = r1 / 2;
                    u2 
            = ( a2 - x1*a1 ) / x1*x1;
                    u1 
            = a1 / x1 - u2;
                    result 
            = ( u1 + u2*n ) * pow( x1, n );
                    
            return result;
                }

            }


            double fsLHRODT::operator()( int n )
            {
                
            if ( flag )
                
            {
                    
            if ( det < 0 )
                        
            return 0;
                    
            else if ( det > 0 )
                    
            {
                        result 
            = u1*pow( x1, n ) + u2*pow( x2, n );
                        
            return result;
                    }

                    
            else
                    
            {
                        result 
            = ( u1 + u2*n ) * pow( x1, n );
                        
            return result;
                    }

                }

                
            else
                    
            return 0;
            }


            fsLHRODT LHRODT;

            #endif
            posted on 2011-04-04 14:40 今晚打老虎 閱讀(1016) 評論(0)  編輯 收藏 引用 所屬分類: 我的開源庫
            亚洲国产精品成人久久蜜臀| 99久久精品国产高清一区二区 | 亚洲日韩欧美一区久久久久我 | 女人高潮久久久叫人喷水| 亚洲欧美成人久久综合中文网| 国产免费久久精品99re丫y| 国产精品18久久久久久vr| 无码乱码观看精品久久| 99久久久精品免费观看国产| 色综合久久天天综线观看| 久久精品国产亚洲AV嫖农村妇女 | 精品国产一区二区三区久久久狼| 国产精品日韩欧美久久综合| 久久亚洲私人国产精品vA| 久久亚洲欧洲国产综合| 97久久国产亚洲精品超碰热| 久久99国产精品久久99小说| 国产91久久综合| 久久99精品国产99久久6男男| 国产69精品久久久久久人妻精品| 国产成人久久精品二区三区| 国产精品一久久香蕉产线看| 亚洲中文字幕久久精品无码APP | 久久亚洲国产最新网站| 99精品伊人久久久大香线蕉| 国产精品一区二区久久国产| 久久久久久夜精品精品免费啦| 国内精品九九久久精品 | 麻豆国内精品久久久久久| 精品久久久久久国产三级| 久久最近最新中文字幕大全| 国产成人精品久久二区二区| 久久精品蜜芽亚洲国产AV| 久久久久亚洲Av无码专| 久久综合噜噜激激的五月天| 久久婷婷五月综合97色直播| 久久99久久99精品免视看动漫| 亚洲狠狠综合久久| 伊人久久大香线焦AV综合影院 | 很黄很污的网站久久mimi色| 青青草国产精品久久|