兔子生兔子問題

一對兔子,從出生後的第3個月起每月都生1對,小兔子長到第3個月後每月又生1對兔子,假如兔子都不死,某個月的兔子總數是多少
分析:每月兔子總數1,1,2,3,5,8,13,21,34,55...算法

n1=1;//第一個月
n2=1;//第二個月函數

n1=n1+n2;//第三個月spa

n2=n1+n2;//第四個月code

f(n):第n個月 兔子總量blog

f(n)=f(n-1)+f(n-2)遞歸

f(5)=f(4)+f(3)ip

f(4):3內存

f(3):2io

f(2):1console

f(1):1

    <script>
        function calFib(){
                var n1=1,n2=1;
                var str='';
                for(var i=1;i<=10;i++){
                    str+=n1+","+n2+",";
                    n1=n1+n2;
                    n2=n1+n2;
                }
                console.log(str);
            }
         calFib();
        /*遞歸:計算兔子總量*/
        function f(n){
         if(n==1|| n==2){
           return 1;
         }
           return f(n-1)+f(n-2);
        }
        console.log(f(5));//第五個月的兔子總數
  </script>        

遞歸:在函數內,又調用了本身;遞歸調用的內層函數,是在外層函數還未結束時,就已經開始了,外層函數的調用,就會被阻塞;

遞歸缺點:算法複雜度過高,浪費內存

解決:大多數遞歸,能夠被循環替代的;

      /*for循環替換遞歸*/
            function f(n){
                if(n==1|| n==2){
                    return 1;
                }
                var f1=1,f2=1;
                var fn;
                //條件:從1開始,到n-2結束
                //操做:f1+f2賦值給一個變量(fn);將f2賦值給f1;將fn賦值給f2;
                for(var i=1;i<=n-2;i++){
                    fn=f1+f2;
                    f1=f2;
                    f2=fn;
                }
                return fn;
            }
            console.log(f(5));
相關文章
相關標籤/搜索