網頁

2009年10月1日 星期四

費式數列

費式數列:

f[0]=f[1]=1
f[n]=f[n-1]+f[n-2]

請用迴圈算到n最大還是正確的f[n]值!

為什麼不要用遞迴做?

64 則留言:

  1. #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {


    int f[50] ;
    int i = 2 ;
    f[0] = f[1] = 1 ;
    while ( i <= 49 ) {
    f[i] = f[i-1] + f[i-2] ;
    i++ ;
    }

    cout << i << "->" << f[i] << endl ;



    system("PAUSE");
    return EXIT_SUCCESS;

    }

    回覆刪除
  2. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[52];
        f[0]=f[1]=1;
        for (int i=2;i<=49;i++)
        {
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system ("pause");
        return 0;
    }


    因為會讓程式在求每一個費氏數時,都會發生重覆計算的現象

    回覆刪除
  3. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[52];
        f[0]=f[1]=1;
        for (int i=2;i<=49;i++)
        {
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system ("pause");
        return 0;
    }


    在求每個費式時會產生重複運算

    回覆刪除
  4. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[52];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
             f[i]=f[i-1]+f[i-2];
             cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }


    因為會重複運算,時間會延長。

    回覆刪除
  5. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[52];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
             f[i]=f[i-1]+f[i-2];
             cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }


    因為會重複運算,時間會延長。

    回覆刪除
  6. #include <iostream>
    #include <cstdlib>
    using namespace std;
    int main()

        int f[52],n;
        f[0]=f[1]=1;
        for(n=2;n<=49;n++)
        {
        f[n]=f[n-1]+f[n-2];
        cout<<n<<"->"<<f[n]<<endl;
        }
        system("pause");
        return 0;
    }

    到45以前是準的

    為何不用遞迴:
    雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大。

    回覆刪除
  7. #include <iostream>
    using namespace std;
    int main()
    {
        int f[52];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
    {
        f[i]=f[i-1]+f[i-2];
        cout<<i<<"->"<<f[i]<<endl;
    }
        system("Pause");
        return 0;
    }

    到45以前是準的

    Q:為什麼不用遞廻?
    A:
    雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大。

    回覆刪除
  8. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int f[50];
        f[0]=1;
        f[1]=1;
        int i;
        for(i=2;i<=49;i++)
        {
             f[i]=f[i-1]+f[i-2];
             printf("f[%d]=%d\n",i,f[i]);
             }
             system("pause");           
             return 0;
             }


    到45以前是準的

    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作

    回覆刪除
  9. #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char *argv[])
    {
      int i;
      unsigned f[50];
      printf("輸入i:\n");
      scanf("%d",&i);
      f[0]=1;
      f[1]=1;
         for(i=2;i<=49;i++)
         {
          f[i]=f[i-1]+f[i-2];
          printf("%d\n",i);
          printf("%d\n",f[i]);
         }
        
      system("PAUSE"); 
      return 0;
    }
    最大到45最大f[45]=1836311903
    因為當呼叫到f(n-1)時,會重複做f(n-1)!!!

    回覆刪除
  10. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int f[50];
        f[0]=1;
        f[1]=1;
        int i;
        for(i=2;i<=49;i++)
        {
             f[i]=f[i-1]+f[i-2];
             printf("f[%d]=%d\n",i,f[i]);
             }
             system("pause");           
             return 0;
             }


    到45是準的

    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作

    回覆刪除
  11. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,f[50];
        printf("輸入;");
        scanf("%d",&i);
        f[0]=f[1]=1;
          for(i=2;i<=49;i++)
          {
            f[i]=f[i-1]+f[i-2];
            printf("%d\n",i);
            printf("%d\n",f[i]);
          }
        system ("pause");
        return 0;
    }

    N為45
    為何不用遞迴是因為會重複作n-1
    但是答應仍相同

    回覆刪除
  12. f[46]開始出現錯誤

    不使用遞迴是因為當n的數值太大,電腦會作很多次多餘的遞迴運算,程式效率低

    回覆刪除
  13. 從46開始出現錯誤

    不使用遞迴,因為當n大一點,電腦會作很多次多餘的遞迴運算,程式效率低

    回覆刪除
  14. #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
        int f[52];
        f[0]=1;
        f[1]=1;
        for(int i=2;i<=49;i++)
        {
               f[i]=f[i-1]+f[i-2];
               printf("f[%d]=%d\n",i,f[i]);
               }
        system("pause");
        return 0;
        }

    為神不用遞迴,因為重複運算,時間就會變長,導致作業時間家長

    回覆刪除
  15. #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
        int f[52];
        f[0]=1;
        f[1]=1;
        for(int i=2;i<=49;i++)
        {
               f[i]=f[i-1]+f[i-2];
               printf("f[%d]=%d\n",i,f[i]);
               }
        system("pause");
        return 0;
        }

    為神不用遞迴,因為重複運算,時間就會變長,

    回覆刪除
  16. #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
        int f[52];
        f[0]=1;
        f[1]=1;
        for(int i=2;i<=49;i++)
        {
               f[i]=f[i-1]+f[i-2];
               printf("f[%d]=%d\n",i,f[i]);
               }
        system("pause");
        return 0;
        }

    為神不用遞迴,因為重複運算,時間就會變長,

    回覆刪除
  17. #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
        int f[52];
        f[0]=1;
        f[1]=1;
        for(int i=2;i<=49;i++)
        {
               f[i]=f[i-1]+f[i-2];
               printf("f[%d]=%d\n",i,f[i]);
               }
        system("pause");
        return 0;
        }

    為神不用遞迴,因為重複運算,時間就會變長,

    回覆刪除
  18. include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[52];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system("pause");
    return 0;
    }


    可以參考到46

    因為用遞回會延長時間成為指數時間

    回覆刪除
  19. #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {


    unsigned f[50] ;
    int i = 2 ;
    f[0] = f[1] = 1 ;
    while ( i <= 49 ) {
    f[i] = f[i-1] + f[i-2] ;
    cout << i << "->" << f[i] << endl ;
    i++ ;

    }





    system("PAUSE");
    return EXIT_SUCCESS;

    }

    i跑到46的時候 還是正確的值
    當i=47時, 會出現不正確的數值

    因為時間複雜度會成為指數時間而沒辦法用

    回覆刪除
  20. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,f[50];
        printf("輸入;");
        scanf("%d",&i);
        f[0]=f[1]=1;
          for(i=2;i<=49;i++)
          {
            f[i]=f[i-1]+f[i-2];
            printf("%d\n",i);
            printf("%d\n",f[i]);
          }
        system ("pause");
        return 0;
    }



    A:45

    回覆刪除
  21. #include <iostream>
    #include <cstdlib>
    using namespace std;
    int main()
    {
        unsigned f[50];
        f[0]=f[1]=1;
        for(int i=2;i<=49;i++)
        {
            f[i]=f[i-1]+f[i-2];
            cout<<"f["<<i<<"]="<<f[i]<<'\n';
        }
        system("pause");
        return 0;
    }



    用遞迴時間複雜度大

    回覆刪除
  22. 46開始
    當 n 大一點,電腦會作很多次多餘的遞迴運算,程式效率低

    回覆刪除
  23. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int f[50];
    f[0]=1;
    f[1]=1;
    int i;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    printf("f(%d)-->",i);
    printf("-->%d\n",f[i]);
    }
    system("pause");
    return 0;
    }

    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作,只是因為它用不用遞迴都可以解,而且比較簡單,所以教科書常拿它來做例子。

    回覆刪除
  24. 46開始
    當 n 大一點,電腦會作很多次多餘的遞迴運算,程式效率低

    回覆刪除
  25. #include<iostream>
    #include<cstdlib>
    using namespace std;
    int main(){
    unsigned f[50];
    f[0]=f[1]=1;
    int i;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<"f["<<i<<"]="<<f[i]<<'\n';
    }
    system("pause");
    return 0;
    }

    遞迴方式的執行時間比迴圈方式久

    回覆刪除
  26. include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[52];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system("pause");
    return 0;
    }


    可以參考到46

    使用遞回會延長時間

    回覆刪除
  27. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,f[50];
        printf("輸入;");
        scanf("%d",&i);
        f[0]=f[1]=1;
          for(i=2;i<=49;i++)
          {
            f[i]=f[i-1]+f[i-2];
            printf("%d\n",i);
            printf("%d\n",f[i]);
          }
        system ("pause");
        return 0;
    }

    a:45

    因為會呼叫很多次來 所以不需用遞迴!

    回覆刪除
  28. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int i,f[50];
        printf("輸入;");
        scanf("%d",&i);
        f[0]=f[1]=1;
          for(i=2;i<=49;i++)
          {
            f[i]=f[i-1]+f[i-2];
            printf("%d\n",i);
            printf("%d\n",f[i]);
          }
        system ("pause");
        return 0;
    }


    A:45

    因為會一直呼叫,所以無需用遞迴

    回覆刪除
  29. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<49;i++)
        {
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;                
        }
       
        system("pause");
        return 0;   
    }



    為什麼不用遞迴?
    用遞迴函數程式呼叫多次,比較費時
    用for迴圈不用呼叫程式

    回覆刪除
  30. include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[52];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system("pause");
    return 0;
    }

    可以參考到46

    使用遞回會延長時間

    回覆刪除
  31. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int f[50];
    f[0]=1;
    f[1]=1;
    int i;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    printf("f(%d)-->",i);
    printf("-->%d\n",f[i]);
    }
    system("pause");
    return 0;
    }


    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作,只是因為它用不用遞迴都可以解,而且比較簡單,所以教科書常拿它來做例子。

    回覆刪除
  32. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    int f[50];
    f[0]=1;
    f[1]=1;
    int i;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    printf("f(%d)-->",i);
    printf("-->%d\n",f[i]);
    }
    system("pause");
    return 0;
    }


    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作,只是因為它用不用遞迴都可以解,而且比較簡單,所以教科書常拿它來做例子。

    回覆刪除
  33. 1.
    #include <iostream>
    using namespace std;
    int main(){
        unsigned f[50];
        f[0]=f[1]=1;
        for(int i=2;i<50;i++){
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }

    到46準的
    2.雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大

    回覆刪除
  34. 1.
    #include <iostream>
    using namespace std;
    int main(){
        unsigned f[50];
        f[0]=f[1]=1;
        for(int i=2;i<50;i++){
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }

    到46準的
    2.雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大

    回覆刪除
  35. #include <cstdlib>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
        int f[50];
        f[0]=f[1]=1;  
        for(int i=2;i<=49;i++)
    {
        f[i]=f[i-1]+f[i-2];
        cout<<i<<"->"<<f[i]<<endl;
    }
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    因為計算出來的是指數時間。

    回覆刪除
  36. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int f[50];
        f[0]=1;
        f[1]=1;
        int i;
        for(i=2;i<=49;i++)
        {
             f[i]=f[i-1]+f[i-2];
             printf("f[%d]=%d\n",i,f[i]);
             }
             system("pause");           
             return 0;
             }


    如果你的遞迴程式的主迴圈當中,最多只有一個分枝會產生遞迴呼叫,那麼這其實是一個 linear recursive function,其實根本就不需要遞迴。 例如二分搜尋法,二元樹的搜尋,或前述的的階乘都是,其實只需要一個迴圈垂直地做 n 次就可以了。 這種情況用遞迴,似乎有點小題大作

    回覆刪除
  37. 1.
    #include <iostream>
    using namespace std;
    int main(){
        unsigned f[50];
        f[0]=f[1]=1;
        for(int i=2;i<50;i++){
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }

    到46準的
    2.雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大

    回覆刪除
  38. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  39. 1.
    #include <iostream>
    using namespace std;
    int main(){
        unsigned f[50];
        f[0]=f[1]=1;
        for(int i=2;i<50;i++){
            f[i]=f[i-1]+f[i-2];
            cout<<i<<"->"<<f[i]<<endl;
        }
        system("pause");
        return 0;
    }

    到46準的
    2.雖然遞迴函數可以很快地幫我們解決問題,但是它並不是一個有效率的寫法,因為我們在 F(n) 中呼叫了 F(n-1) 及 F(n-2),而 F(n-1) 又會呼叫 F(n-2) 及 F(n-3),如此一來,F(n-2) 就被重複呼叫了,隨著 n 越來越大,這個重複呼叫的次數會越來越大

    回覆刪除
  40. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  41. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  42. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  43. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  44. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  45. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  46. #include <cstdlib>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
        int* f=new int[50];
    f[0]=f[1]=1;
    for (int i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"="<<f[i]<<endl;
    }
        system("PAUSE");
        return EXIT_SUCCESS;
    }




    因為可以減少不必要打這麼多的程式
    還有減少運算時間
    加速運算

    回覆刪除
  47. #include <cstdlib>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
        int* f=new int[50];
        f[0]=f[1]=1;
        for(int i=2;i<=49;i++)
        {
        f[i]=f[i-1]+f[i-2];
        cout<<i<<"--"<<f[i]<<endl;     
        }
       
       
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    為何不要用遞迴做?
    減少時間。(因為遞迴運作時間較長)

    回覆刪除
  48. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  49. (1)#include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char *argv[])
    {
      int i;
      unsigned f[50];
      printf("輸入i:\n");
      scanf("%d",&i);
      f[0]=1;
      f[1]=1;
         for(i=2;i<=49;i++)
         {
          f[i]=f[i-1]+f[i-2];
          printf("%d\n",i);
          printf("%d\n",f[i]);
         }
        
      system("PAUSE"); 
      return 0;
    }
    最大45最大f[45]=1836311903
    (2)因為會造成指數時間

    回覆刪除
  50. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  51. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  52. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  53. #include <iostream>
    using namespace std;
    int main()
    {
        unsigned f[50];
        int i;
        f[0]=f[1]=1;
        for(i=2;i<=49;i++)
        {
                          f[i]=f[i-1]+f[i-2];
                          cout<<i<<"->"<<f[i]<<endl;
                          }
        system("pause");
        return 0;
    }



    因為使用遞迴,會呼叫比較多次,用For迴圈就不用呼叫

    回覆刪除
  54. #include <cstdlib>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
        int f[50];
        f[0]=f[1]=1;
        for(int i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"去"<<f[i]<<endl;
    }
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    2.出來時間是指數時間

    回覆刪除
  55. #include<iostream>
    #include<cstdlib>
    using namespace std;
    int main(){
              unsigned f[50];
              f[0]=f[1]=1;
              int i;
              for(i=2;i<=49;i++)
              {
                f[i]=f[i-1]+f[i-2];
                cout<<"f["<<i<<"]="<<f[i]<<'\n';
                }
              system("pause");
              return 0;
              }
    假若輸入的數列為5
    就會印出:迴圈方式執行結果:5, 執行時間:112微秒
    遞迴方式執行結果:5, 執行時間:59微秒
    遞迴方式的執行時間為迴圈方式的 0.53 倍。

    回覆刪除
  56. #include <iostream>
    using namespace std;
    int main(int argc,char*argv[])
    {
    unsigned f[50];
    int i=2;
    f[0]=f[1]=1;
    while(i<=49)
    {

    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    i++;
    }
    system("Pause");
    return EXIT_SUCCESS;
    }

    因為i=45時,才是正確的數值
    因為時間複雜度會為指數時間。

    回覆刪除
  57. #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    unsigned f[50];
    int i;
     f[0]=f[1]=1;
     for(i=2;i<=49;i++)
     {
       f[i]=f[i-1]+f[i-2];
     }
     for(i=0;i<=49;i++)
       {
       printf("%d\n",i);
       printf("%d\n",f[i]);
       }
     system("pause");
     return 0;
    }

    因為i=45時,才是正確的數值
    因為時間複雜度為指數時間。

    回覆刪除
  58. #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int f[50];
    f[0]=f[1]=1;
    for(int i=2;i<50;i++){
    f[i]=f[i-1]+f[i-2];
    printf("%d\n",i);
    printf("%d\n" ,f[i]);
    }
    system("pause");
    return 0;
    }


    因為指數時間

    回覆刪除
  59. #include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[50];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system("pause");
    return 0;
    }



    使用遞迴,呼叫次數會比較多,使用For迴圈不用呼叫

    回覆刪除
  60. #include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[52];
    f[0]=f[1]=1;
    for (int i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system ("pause");
    return 0;
    }

    回覆刪除
  61. #include <iostream>
    using namespace std;
    int main()
    {
    unsigned f[52];
    f[0]=f[1]=1;
    for (int i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system ("pause");
    return 0;
    }

    回覆刪除
  62. unsigned f[50];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    }
    for(i=0;i<=49;i++)
    {
    printf("%d\n",i);
    printf("%d\n",f[i]);
    }
    system("pause");
    return 0;
    }

    因為i=45時,才是正確的數值
    因為時間複雜度為指數時間。

    回覆刪除
  63. #include <iostream>

    using namespace std;

    int main()
    {
    unsigned f[52];
    int i;
    f[0]=f[1]=1;
    for(i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    cout<<i<<"->"<<f[i]<<endl;
    }
    system("pause");
    return 0;
    }


    參考至46 使用遞回會延長時間

    回覆刪除
  64. #include <stdio.h>
    #include <stdlib.h>
    int main ()
    {
    int f[52];
    f[0]=1;
    f[1]=1;
    for(int i=2;i<=49;i++)
    {
    f[i]=f[i-1]+f[i-2];
    printf("f[%d]=%d\n",i,f[i]);
    }
    system("pause");
    return 0;
    }

    為神不用遞迴,因為重複運算,時間就會變長,

    回覆刪除

HTML 編輯器