javascript语言算法实例11题

题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和(从第三个月开始)。

方法一:利用函数递归

<script type="text/javascript">
//总数:1,1,2,3,5,8,13,21
//月数:1,2,3,4,5,6, 7, 8
//f(1)=1;f(2)=1;
//f(n)=f(n-1)+f(n-2)
 function resultFn(n){
    function f(n){
      if(n<3) return 1;
      else {
        return arguments.callee(n-1) + arguments.callee(n-2)
       }
     }
    console.log(f(n))
    }           
  for(let n=0;n<=40;n++){
     resultFn(n)
  }
</script>

我们发现利用函数递归的方式,照成了大量的重复计算,效率是非常之地的。

方法二:利用循环的方式

<script type="text/javascript">

 function resultFn(n){
    function f(n){
      if(n<3) return 1;
      else {
        /*      f1            f2             fn
                1             1              2      n=3 
                1             2              3      n=4
                2             3              5      n=5
                3             5              8      n=4
             */
              var f1=1,f2=1,fn;
              for(var i=3;i<=n;i++){
                fn=f1+f2;
                f1=f2;
                f2=fn;
              }
              return fn;
       }

     }
    console.log(f(n))
    }           
  for(let n=0;n<=40;n++){
     resultFn(n)
  }
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。