兔子生兔子问题

一对兔子,从出生后的第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));
相关文章
相关标签/搜索