您的位置:首页 > 其它

累加、迭代、递推、穷举、递归 ,等运算,笔记

2017-08-07 20:58 274 查看

8、计算

 

8.1累加:

累加:将一系列的数据加到一个变量里面,最后得到了累加的结果。

 

一般形式:

累加:V+=e;

累积:V*=e;

V代表累加和累积,e代表累加累积项。

算法要点:

1.    初始化V

累加:V=0;

累积:V=1;

e的初始化,如果累加项/积项比较复杂,可能会分解为几个子项分别初始化,比如圆周率的问题,累加项分解为符号、分子和分母三部分。

2.    循环的控制条件:

   1)固定次数的,比如说计算弹跳距离的问题,计算前二十项的和的问题。次数不固定而是要满足某个条件:计算圆周率的问题求最后一项的绝对值要小于10-6   。

 

3.    确定累加、积项的变化

比如数列的前20项之和,是将当前分子分母之和作为下次的分母,当前的分母比作分子。

再比如求圆周率的问题,是将符号取反、分母加2,然后的处下一项。

 

比如:小球从高处落下,每次返回到原来的一半,求第十次小球落地的总过程

var h=100;
var s=0;
for(var i=0;i<10;i++){

    h=h/2;

    s+=h
}
s=s*2+100;
alert(s);

 

 

累积:将一些列的数据乘积积到一个变量里。

/*累积*/
var n=100;
var s=1;
for(var i=0;i<100;i++){

    s*=i
}

 

 

 

 

8.2迭代

迭代法也叫辗转法

规律:就是可以不断地用旧的值去得到新的值,直到我们想要得到的结果。遇到迭代的问题怎么解决:

(1)找到迭代的变量(旧的值)

(2)确定迭代的关系

(3)知道想要的结果是什么(结束循环条件)

1)         直到最终的结果

2)         循环的次数

* 1.判断两个数的大小,将大的给num1,小的给num2

* 2.如果num1对num2取余为0,那么num2就是最大公约数

* 3.否则把num2的值给num1,将num1,num2的余数赋给num2,再次重来

* 4.最终得到最大公因数。

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;;

}

 

8.3递推

      解决思路:

             找到数学规律,通过公示计算下一项的值,一直找到我们想要的结果为止。

例如:兔子产子:通过前两项得到下一项。

/*方法二:*/
var rabbit = [1,
1];
for (var m =
2; m
<= month;
m++) {

    rabbit[m] =
rabbit[m
- 1] + rabbit[m
- 2];

}
alert(rabbit[month]);

8.4穷举

遇到一个问题,找不到数学公式或者规律时(解决办法),使用最“笨”的方法,利用计算机的计算速度快的特点,将所有可能性全部列出来,并将我们想要的结果记录下来。

如下例

/*

 * 一只公鸡5块,母鸡三块,鸡娃三只一块。

 * 买一百只鸡,一百块钱,公鸡、母鸡、小鸡各多少?

 * */
for (var
cock
=
0; cock <
20; cock++) {

    for (var
hen
=
0; m <
33; m++) {

        var chicken =
100 - cock
- m;

        if (100
== cock *
5 + m *
3 + chicken/
3) {

            document.write("公鸡:"
+ cock +
"、"
+ "母鸡:"
+ m +
"、"
+ "鸡娃:"
+ chicken+ "<br>")

      
baa9
  }

    }

}

穷举的方法的特点就是简单,但是计算量往往是很大的。但计算机的优势就是计算快,所以这个算法可以扬长避短,往往可以取得不错的效果。

案例:有一位三位数,个位数字比百位大,百位数字比十位答,并且各位数字之和等于各位数字相乘之积,求此三位数。

 

8.5递归

 

所谓的递归,就是在函数内部又去掉自己。

例如求阶乘问题:在fact函数内部去调用fact函数。

/*

* 计算N的阶乘

* */
function fact(n){

    if(1==n){

        return 1;

    }

    return n*fact(n-1);

}
alert(fact(5));

递归计算法如果按照常规思路去理解是非常复杂的,函数一层一嵌套调用,然后又一城一成返回。不妨换个思路去理解递归。

递归实际上就是将规模为n的问题降阶为n-1的问题进行求解。也就是去找n和n-1之间的的关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息