累加:将一系列的数据加到一个变量里面,最后得到了累加的结果。
一般形式:
累加:V+=e;
累积:V*=e;
V代表累加和累积,e代表累加累积项。
算法要点:
1.初始化V
累加:V=0;
累积:V=1;
e的初始化,如果累加项/积项比较复杂,可能会分解为几个子项分别初始化,比如圆周率的问题,累加项分解为符号、分子和分母三部分。
2.循环的控制条件:
1)固定次数的,比如说计算弹跳距离的问题,计算前二十项的和的问题。次数不固定而是要满足某个条件:计算圆周率的问题求最后一项的绝对值要小于10-6。
3.确定累加、积项的变化
比如数列的前20项之和,是将当前分子分母之和作为下次的分母,当前的分母比作分子。
再比如求圆周率的问题,是将符号取反、分母加2,然后的处下一项。
比如:小球从高处落下,每次返回到原来的一半,求第十次小球落地的总过程
varh=100;vars=0;for(vari=0;i<10;i++){h=h/2;s+=h}s=s*2+100;alert(s);
累积:将一些列的数据乘积积到一个变量里。
/*累积*/varn=100;vars=1;for(vari=0;i<100;i++){s*=i}
迭代法也叫辗转法
规律:就是可以不断地用旧的值去得到新的值,直到我们想要得到的结果。遇到迭代的问题怎么解决:
(1)找到迭代的变量(旧的值)
(2)确定迭代的关系
(3)知道想要的结果是什么(结束循环条件)
1)直到最终的结果
2)循环的次数
*1.判断两个数的大小,将大的给num1,小的给num2*2.如果num1对num2取余为0,那么num2就是最大公约数*3.否则把num2的值给num1,将num1,num2的余数赋给num2,再次重来*4.最终得到最大公因数。
functionGCD(num1,num2){if(num1 解决思路: 找到数学规律,通过公示计算下一项的值,一直找到我们想要的结果为止。 例如:兔子产子:通过前两项得到下一项。 /*方法二:*/varrabbit=[1,1];for(varm=2;m<=month;m++){rabbit[m]=rabbit[m-1]+rabbit[m-2];}alert(rabbit[month]); 遇到一个问题,找不到数学公式或者规律时(解决办法),使用最“笨”的方法,利用计算机的计算速度快的特点,将所有可能性全部列出来,并将我们想要的结果记录下来。 如下例 /**一只公鸡5块,母鸡三块,鸡娃三只一块。*买一百只鸡,一百块钱,公鸡、母鸡、小鸡各多少?**/for(varcock=0;cock<20;cock++){for(varhen=0;m<33;m++){varchicken=100-cock-m;if(100==cock*5+m*3+chicken/3){document.write("公鸡:"+cock+"、"+"母鸡:"+m+"、"+"鸡娃:"+chicken+" 穷举的方法的特点就是简单,但是计算量往往是很大的。但计算机的优势就是计算快,所以这个算法可以扬长避短,往往可以取得不错的效果。 案例:有一位三位数,个位数字比百位大,百位数字比十位答,并且各位数字之和等于各位数字相乘之积,求此三位数。 所谓的递归,就是在函数内部又去掉自己。 例如求阶乘问题:在fact函数内部去调用fact函数。 /**计算N的阶乘**/functionfact(n){if(1==n){return1;}returnn*fact(n-1);}alert(fact(5)); 递归计算法如果按照常规思路去理解是非常复杂的,函数一层一嵌套调用,然后又一城一成返回。不妨换个思路去理解递归。 递归实际上就是将规模为n的问题降阶为n-1的问题进行求解。也就是去找n和n-1之间的的关系。
")}}}