feng

          飄逸~~~~~life

          javascript求Fibonacci的問題

          在學(xué)習(xí)javascript,一本書上后面有個(gè)習(xí)題:
          編寫一個(gè)計(jì)算Fibonacci數(shù)的程序,要求讓用戶輸入n值,并顯示計(jì)算結(jié)果。
          Fibonacci的定義為:Fn=Fn-1+Fn-2,F1=1,F2=1,n=3,4....前幾個(gè)Fibonacci數(shù)為: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函數(shù)的思路是用current來記錄當(dāng)前的Fibonacci的值,我初始了i=2,也就是沒有管n=1,2的時(shí)候,檢測i的值是否和n值相同,相同就返回當(dāng)前的
          current
          否則繼續(xù)遞歸dell函數(shù)
          我看了參考答案,是這樣寫的
          <html>
              <head><title> 7-4參考答案 </title>
              <script language=javascript>
                  <!--
                  function Fibonacci(n){  // 定義函數(shù)
                      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("請輸入計(jì)算第幾個(gè)Fibonacci數(shù):", ""));
                   var total=Fibonacci(userinput);  //調(diào)用遞歸函數(shù)
                   alert("第"+ userinput +"個(gè)Fibonacci為:"+total);
                   //-->       
                </script>
              </body>
              </html>
          我發(fā)現(xiàn)在運(yùn)行參考答案的時(shí)候,n的數(shù)值太大的時(shí)候就有問題了,瀏覽器非常卡,并且提示

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

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

          Feedback

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

          Fibonacci,在提到他的時(shí)候一般都是在說遞歸。
          你自己寫的里面其實(shí)已經(jīng)不能完全說是遞歸了,已經(jīng)有點(diǎn)循環(huán)的概念了(畢竟,遞歸是可以轉(zhuǎn)換為循環(huán)),只是沒有完全轉(zhuǎn)換為循環(huán)。
          你寫的應(yīng)該是比參考答案的效率高,因?yàn)檎{(diào)用函數(shù)的開銷是很高的(就像參考但按中的那樣)。
          但遞歸有它自己的優(yōu)點(diǎn):結(jié)構(gòu)(邏輯)清晰,可讀性強(qiáng)。缺點(diǎn)就是效率低,相差一兩個(gè)數(shù)量級是很常見的。
          在實(shí)際當(dāng)中,真正用遞歸的地方很少。  回復(fù)  更多評論   

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

          遞歸的方法垃圾。  回復(fù)  更多評論   

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

          這里設(shè)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的話,執(zhí)行時(shí)間比n幾乎多一倍。
            回復(fù)  更多評論   

          # 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>  回復(fù)  更多評論   



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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 临汾市| 宜兰县| 靖远县| 卢龙县| 安阳县| 蒙阴县| 汽车| 澄江县| 新兴县| 澜沧| 巴青县| 洱源县| 库尔勒市| 东港市| 东阿县| 富阳市| 团风县| 弥勒县| 萍乡市| 吴旗县| 瑞丽市| 治县。| 台前县| 唐河县| 金山区| 德清县| 蛟河市| 于田县| 云阳县| 伊金霍洛旗| 洛川县| 五家渠市| 田阳县| 密山市| 大邑县| 抚松县| 肇源县| 宁化县| 茂名市| 永仁县| 筠连县|