zoukankan      html  css  js  c++  java
  • 兔子生兔子问题

    一对兔子,从出生后的第3个月起每个月都生1对,小兔子长到第3个月后每个月又生1对兔子,假如兔子都不死,某个月的兔子总数是多少
    分析:每个月兔子总数1,1,2,3,5,8,13,21,34,55...

    n1=1;//第一个月
    n2=1;//第二个月

    n1=n1+n2;//第三个月

    n2=n1+n2;//第四个月

    f(n):第n个月 兔子总量

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

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

    f(4):3

    f(3):2

    f(2):1

    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));
  • 相关阅读:
    group by;having;order by
    oracle官方文档
    oracle正则表达式函数和正则表达式简介
    oracle系统函数
    oracle系统表
    windows搭建ftp服务器
    开机自动挂载
    linux修改设置ip地址
    My First Web Server
    为什么要写博客?
  • 原文地址:https://www.cnblogs.com/7662-scy/p/6542133.html
Copyright © 2011-2022 走看看