递推|迭代|穷举案例

来源:互联网 发布:威少刷数据 编辑:程序博客网 时间:2024/05/29 14:08
递推案例:
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月就能生出一对兔子来如果兔子都不死,那么每月总共有多少兔子?

 一般是要找到数学规律,通过公式计算找到下一项的值,一直找到我们要的结果;

列如:兔子产子,通过前两项的到最后一项;

       /!*    * 月份  0    1     2   3    4   5   6    * 幼崽  1    1    1    2    3   5   8    * 成年  0    0    1    1    2   3   5    * 总共  1    1    2    3    5   8  13*!/     /!*接收用户输入的月份     * 计算兔子的个数     * 1、如果经过的月份<2那么兔子的对数为1     * 2、否则 同初始的兔子加上第一个月的个数为     *    第二个月的兔子的个位数(an+1 = an+an-1     *    反复使用这个公式 计算下个月兔子的个数,     *    直到用户输入结束     * 打印兔子的对数     * *!/    var month = Number(prompt("请输入月份:"));    var sum = 2;    var an = 1;    var an_1 =1;    var an_2;    if(month < 2){        sum = 1;    }else{        sum = 2;        for(var i=1;i<month;i++){            sum =an + an_1;            an_1 = an;            an = sum;        }    }    alert(sum);*/

第二种方式 更简单化    var month = Number(prompt("请输入月份:"));    var  rabbit = [1,1];    for (var m = 2; m<=month;m++){        rabbit[m] = rabbit[m-1]+rabbit[m-2];    }    alert(rabbit[month]+"");

迭代案例:

<script>    /*求最大公约数*/    /*22  54    54 / 22 = 2......10    22 / 10 = 2......2    10 / 2 = 5......0*/    /*1、接收用户输入的两个数    * 2、一个函数得到最大公约数    * 3、打印这个最大公约数*/    var num1 = Number(prompt("请输入一个数:"));    var num2 = Number(prompt("请输入一个数:"));    var result = GCD(num1,num2);    alert(result);    /*函数的功能:得到最大公约数    * 函数名 :GCD    * 函数参数:两个整数    * 返回值:最大公约数    * */   /*如果num1<num2则交换,确保num1较大     * 1、用判断两个数的大小,将大的数给num,小的给num2     *2、计算余数     *3、当num1 num2的余数不为0,重复以下步骤     *4num2 =>num1    *5、余数=>num2    *5、重新计算余数    *7、得到最大公约数*/    function GCD(num1, num2) {        if (num1 < num2) {            var t = num1;            num1 = num2;            num2 = t;        }        var remainder = num1 % num2;        while (remainder != 0) {            num1 = num2;            num2 = remainder;            remainder = num1 % num2;        }        return num2;    }</script>

穷举案例:

遇到问题,找不到更好的办法,(找不到数学规律或者公式,)使用最笨的办法,利用计算机速度块的特点,将所有的可能性全部列举出来,并将我们想要的结果计录下来;

列如:百钱买百鸡

 

  /*公鸡一直钱五,母鸡一直钱三,小鸡三值钱一  * 百钱买百鸡,问公鸡、母鸡。小鸡个各几何?  *  * x  y  z  * x+y+z = 100  * x*5+y*3+z/3 = 100*//* // 该问题用java程序算法如下:  var Cock, Hen, Chick; /!* 定义公鸡,母鸡,鸡雏三个变量 *!/  Cock = 0;  while (Cock <= 19) /!* 公鸡最多不可能大于19 *!/  {      Hen = 0;      while (Hen <= 33) /!* 母鸡最多不可能大于33 *!/      {          Chick = 100 - Cock - Hen;          if (Cock * 15 + Hen * 9 + Chick == 300)/!* 将数量放大三倍比较  这里随着倍数放大答案也会变多*!/              document.write("\n公鸡=" + Cock +"<br>" + "母鸡=" + Hen +"<br>"+ "雏鸡=" + Chick +"<br>");          Hen = Hen + 1;      }      Cock = Cock + 1;  }*/      for (var  g=0;g<20;g++){      for(var m=0;m<33;m++){      var x = 100-g-m;      if(100==g*5+m*3+x/3){              document.write("公鸡粑粑可以买"+cock+"母鸡麻麻可以买"+m+"小雏鸡可以买"+x+"<br>")          }      }  }

原创粉丝点击