<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    feng

    飄逸~~~~~life

    javascript求Fibonacci的問題

    在學習javascript,一本書上后面有個習題:
    編寫一個計算Fibonacci數的程序,要求讓用戶輸入n值,并顯示計算結果。
    Fibonacci的定義為:Fn=Fn-1+Fn-2,F1=1,F2=1,n=3,4....前幾個Fibonacci數為:1,1,2,3,5,8,13........
    首先是我自己寫的
    <html>
    <head><script language="javascript">

    var a=1;
    var b=1;
    var i=2;
    var current;
    function dell(n){
      current=a+b;
       b=a;
       a=current;
       i++;
       if(i==n){
       return current;
        }
       else{
       return dell(n);
       }
     }
    </script></head>
    <body>
    <script language="javascript">
    var userinput=eval(prompt("請輸入N的置:",""));
    var total=dell(userinput);
    alert(total);
    </script>
    </body>
    </html>
    我里面dell函數的思路是用current來記錄當前的Fibonacci的值,我初始了i=2,也就是沒有管n=1,2的時候,檢測i的值是否和n值相同,相同就返回當前的
    current
    否則繼續遞歸dell函數
    我看了參考答案,是這樣寫的
    <html>
        <head><title> 7-4參考答案 </title>
        <script language=javascript>
            <!--
            function Fibonacci(n){  // 定義函數
                if ((n==1) || (n==2)) {
                   return 1;
                }
                else {
                   return (Fibonacci(n-1)+Fibonacci(n-2));
                }
            }
            //-->       
        </script>
        </head>
        <body>
          <script language="JavaScript">
             <!--
             var userinput=eval(prompt("請輸入計算第幾個Fibonacci數:", ""));
             var total=Fibonacci(userinput);  //調用遞歸函數
             alert("第"+ userinput +"個Fibonacci為:"+total);
             //-->       
          </script>
        </body>
        </html>
    我發現在運行參考答案的時候,n的數值太大的時候就有問題了,瀏覽器非常卡,并且提示

    這個是否說明我的程序比較有效率,是什么原因造成的?知道的人指點下

    posted on 2008-01-10 11:15 feng 閱讀(1493) 評論(4)  編輯  收藏

    Feedback

    # re: javascript求Fibonacci的問題 2008-01-11 06:19 馬奪元

    Fibonacci,在提到他的時候一般都是在說遞歸。
    你自己寫的里面其實已經不能完全說是遞歸了,已經有點循環的概念了(畢竟,遞歸是可以轉換為循環),只是沒有完全轉換為循環。
    你寫的應該是比參考答案的效率高,因為調用函數的開銷是很高的(就像參考但按中的那樣)。
    但遞歸有它自己的優點:結構(邏輯)清晰,可讀性強。缺點就是效率低,相差一兩個數量級是很常見的。
    在實際當中,真正用遞歸的地方很少。  回復  更多評論   

    # re: javascript求Fibonacci的問題 2008-10-14 16:49 hoho

    遞歸的方法垃圾。  回復  更多評論   

    # re: javascript求Fibonacci的問題 2008-10-14 17:35 hoho

    這里設n取5,第一次遞歸:Fibonacci(5)=Fibonacci(4)+Fibonacci(3);
    第2次遞歸:Fibonacci(5)=Fibonacci(4)+Fibonacci(3);
    Fibonacci(4)=Fibonacci(3)+Fibonacci(2)
    =Fibonacci(3)+1 ;
    Fibonacci(3)=Fibonacci(2)+Fibonacci(1)=1+1=2;//n值為1or2,
    第3次遞歸:Fibonacci(5)=Fibonacci(4)+Fibonacci(3);
    Fibonacci(4)=Fibonacci(3)+Fibonacci(2)
    =Fibonacci(3)+1 ;
    Fibonacci(3)=Fibonacci(2)+Fibonacci(1)=1+1=2;
    Fibonacci(3)=Fibonacci(2)+Fibonacci(1)=1+1=2;
    1:f(5)
    2:f(4)+f(3)
    3:f(3)+f(2)+f(2)+f(1)
    4:f(2)+f(1)+f(2)+f(2)+f(1)

    如果n為6的話,幾乎多了一倍的分解。f(6)=f(5)+f(4);
    f(5) 為上面的。f(4)類似.
    也就是說n+1的話,執行時間比n幾乎多一倍。
      回復  更多評論   

    # re: javascript求Fibonacci的問題 2008-10-14 17:43 hoho


    <html>
    <head>
    <title>ex2.html</title>
    </head>

    <body>
    <script type="text/javascript">
    var n=eval(prompt("",""));
    var i=0;
    var lo=1;
    var hi=1;
    while(i<n-2){
    hi=lo+hi;
    lo=hi-lo;
    i++;
    }
    alert(hi);
    </script>
    </body>
    </html>  回復  更多評論   



    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 日韩亚洲国产综合高清| 亚洲综合久久成人69| 在线观看亚洲视频| 在线观看人成视频免费| 亚洲一级免费毛片| 无码永久免费AV网站| 亚洲国产精品无码久久久| 国产成人精品免费视频动漫| 亚洲国产日韩在线| 黄在线观看www免费看| 亚洲午夜精品一区二区公牛电影院| 国产福利在线免费| 亚洲综合一区二区三区四区五区| 女人18毛片a级毛片免费视频| 亚洲AV无码成人网站在线观看| 国产成人aaa在线视频免费观看| 国产精品黄页免费高清在线观看| 免费国产成人午夜电影| eeuss影院www天堂免费| 自拍偷自拍亚洲精品被多人伦好爽| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲尤码不卡AV麻豆| 国产精品免费观看调教网| 久久精品国产亚洲av高清漫画 | 中文字幕手机在线免费看电影| 亚洲av无码乱码国产精品fc2| 97在线观看永久免费视频| 亚洲国产精品美女久久久久| 亚洲乱码日产精品a级毛片久久| a国产成人免费视频| 亚洲最大视频网站| 国产成人青青热久免费精品| 两个人看的www免费高清| 91亚洲精品麻豆| 国产亚洲精品免费| 暖暖免费在线中文日本| 亚洲日韩av无码中文| 在线亚洲午夜理论AV大片| 青青视频观看免费99| 一级黄色片免费观看| 亚洲免费在线视频播放|