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



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


          網站導航:
           
          主站蜘蛛池模板: 商水县| 湘乡市| 蒲江县| 八宿县| 攀枝花市| 萨迦县| 五台县| 肥东县| 天台县| 怀远县| 玉山县| 田林县| 清新县| 泉州市| 固镇县| SHOW| 尼木县| 丽江市| 宁明县| 广灵县| 万源市| 宁乡县| 家居| 澄迈县| 乐都县| 蒙阴县| 朔州市| 全州县| 历史| 息烽县| 佛坪县| 望都县| 郑州市| 江阴市| 南陵县| 长治市| 改则县| 长垣县| 醴陵市| 大丰市| 峨边|