递推|迭代|穷举案例

xiaoxiao2021-02-28  50

递推案例: 一般而言,兔子在出生两个月后,就有繁殖能力, 一对兔子每个月就能生出一对兔子来 如果兔子都不死,那么每月总共有多少兔子?

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

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

        /!*     * 月份  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>")           }       }   }

转载请注明原文地址: https://www.6miu.com/read-81485.html

最新回复(0)