隨筆-159  評論-114  文章-7  trackbacks-0

          局部變量,塊內的變量(函數為最大的塊)

          全局變量在所有函數之外(函數都可用)

          內存:

             代碼區      數據區

             棧為局部變量
             堆區為動態分配
             全局數據區,靜態數據區
             常量區,主要是字面量,內存為只讀的。

          函數的形參,可以給默認值

          可以為形參指定默認值(從右向左),調用時可以不用傳遞參數。

          fact(int n,int m = 1);

          但是不能跳躍傳遞參數,二義性!

          enum Sex{
            MALE,FEMALE
          }

          void disp(char* name, Sex gender = MALE);

          函數聲明中指定了默認值,不能在定義時,再指定默認值,但可以追加默認值。

          fact(int , int  =1);  這樣聲明沒問題。

          內聯函數,提高程序運行效率,調用函數時,不是調用,而是搬一份到調用處,不用進行真正函數調用,所以無開辟棧的開銷。

          會增加代碼的長度

          如果函數很復雜,不能成為內聯函數。不支持控制結果。

          規定1,必須先定義,不支持函數原形。
          因為搬函數代碼時,是在編譯過程中進行的。

          比較  調用開銷 VS 執行開銷,來判斷是否使用內聯函數,對于很簡單的函數值得內聯。

          2.是否能成為內聯函數完全有編譯程序決定

          3.不支持控制結構。

          #include <iostream>
          using namespace std;
          inline 
          int isnumber(char ch)
          {
                 
          return ((ch >= '0' && ch <='9')? 1:0);       
          }
           

          int main()
          {
              
          char in
              
          while(true)
                  cout 
          << "please input a char:(input q to exit) >";
                  
          in = cin.get();
                  
          if(isnumber(in))
                  
          {
                        cout 
          << "you input is num " << in - '0' << endl;                 
                  }

                  
          else
                  
          {
                        
          if(in == 'q')
                              
          break
                        cout 
          << "you input is not num " << endl;     
                  }
           
                  cin.ignore(
          100,'\n'); 
              }
           
              cout 
          << "please input any key to exit" << endl; 
              cin.
          get(); 
              cin.
          get(); 
              
          return 0;    
          }

           

          遞歸函數

          一個函數自己調用自己,不管問題多復雜,只要把問題簡化為最簡單的形式。

          遞歸函數不可能是內聯函數

          效率,遞歸 < 循環 < 公式

          任何遞歸都可以改為非遞歸,需要用到棧,代碼就很看懂了。改后,不一定提高效率。因為遞歸本身就是去開辟棧完成的。為何不保留代碼可讀性呢。

          唯一條件,遞歸必須存在一個必須滿足的條件,以結束推出。

          菲波那契數列,求對應位置的值

          頭文件

          #ifndef FIB_H
          #define FIB_H 
          double fib( int );
          double fi( int );
          #endif

          函數定義文件,遞歸

          double fib( int n )
          {
              
          if( n<1 )
                  
          return 0;
              
          if( n<3 )
                  
          return 1;
              
          return fib( n-1 ) + fib( n-2 );
          }


          double fi( int n )
          {
              
          if( n<1 )
                  
          return 0;
              
          if( n<3 )
                  
          return 1;
              
          double d,d1,d2;
              d1
          =1;
              d2
          =1;
              
          forint i=3;i<=n;i++ ){
                  d
          =d1+d2;
                  d1
          =d2;
                  d2
          =d;
              }

              
          return d;
          }


          主函數文件

          #include <iostream>
          using namespace std;
          #include 
          "fib.h"

          int main()
          {
              cout
          <<"please input item no.:";
              
          int n;
              cin
          >>n;
              cout
          <<"item "<<n<<" is "<<fi(n)<<endl;
              
          return 0;
          }





          posted on 2006-02-04 23:35 北國狼人的BloG 閱讀(525) 評論(0)  編輯  收藏 所屬分類: 達內學習總結
          主站蜘蛛池模板: 巴彦淖尔市| 玛沁县| 荣成市| 五指山市| 广德县| 长顺县| 隆子县| 安新县| 成安县| 亳州市| 昌都县| 宁津县| 锡林浩特市| 门源| 灌阳县| 郎溪县| 文安县| 从江县| 克山县| 浦北县| 出国| 沾化县| 蓬溪县| 房产| 阿鲁科尔沁旗| 凤阳县| 淮阳县| 得荣县| 喀喇| 本溪市| 肥西县| 无棣县| 龙海市| 四平市| 阿合奇县| 调兵山市| 霍州市| 泊头市| 曲松县| 合川市| 南宁市|