<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 閱讀(1496) 評論(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>  回復  更多評論   



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


    網站導航:
     
    主站蜘蛛池模板: 日韩电影免费在线观看中文字幕| 亚洲日产2021三区| 曰批全过程免费视频免费看| 一二三四免费观看在线视频中文版| 亚洲精品美女久久久久9999| 久久久久成人片免费观看蜜芽| 亚洲精品无码成人AAA片| 中国一级全黄的免费观看| 亚洲色无码专区在线观看| 国产成人免费ā片在线观看老同学| 亚洲午夜福利717| 免费一级毛片无毒不卡| 亚洲黄色中文字幕| 1024免费福利永久观看网站| 亚洲午夜无码久久久久小说 | 亚洲av综合色区| 免费在线看污视频| 亚洲第一二三四区| 成人黄动漫画免费网站视频 | 亚洲精品高清久久| 成人免费观看一区二区| 亚洲午夜福利在线视频| 亚洲а∨天堂久久精品| 黄网站免费在线观看| 亚洲精品美女在线观看| 色吊丝永久在线观看最新免费| 美女免费视频一区二区三区| 亚洲一区二区三区影院 | 亚洲第一中文字幕| 99久久综合国产精品免费| 午夜在线亚洲男人午在线| 亚洲精品狼友在线播放| 国产a视频精品免费观看| 亚洲AV无码一区二区三区性色| 亚洲综合激情另类专区| 四虎影视在线影院在线观看免费视频| 亚洲性无码av在线| 免费人成视频在线观看视频| 暖暖免费在线中文日本| 亚洲砖码砖专无区2023| 久久久久亚洲av成人无码电影|