为了账号安全,请及时绑定邮箱和手机立即绑定

js for循环有规律分数值求和

js for循环有规律分数值求和

慕粉3915648 2016-09-01 10:54:00
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
查看完整描述

4 回答

?
十月海洋

TA贡献12条经验 获得超14个赞

递归算法,高效准确,代码如下:

var fun=function(index){
           //对前两项进行数值判定
           if (index <=2) {
               return index;
           }
           else {
               return fun(index - 1) + fun(index - 2);
        }
      }
        
       for (var i = 1; i <= 20; i++) {
           console.log(fun(i + 1) + '----' + fun(i));
           /*输出的结果如下:
           2----1
           3----2
           5----3
           8----5
           13----8
           21----13
           34----21
           55----34
           89----55
           */
       }

一旦你能够得到每项的数字,算和的话,只需要依次累加就可以了,希望对你有所帮助

查看完整回答
2 反对 回复 2016-09-01
?
阿旭_

TA贡献217条经验 获得超353个赞

设置行变量为i,分子为a,分母为b,观察

行i   分子a    分母b

0      2          1    (所以代码初始化值应该是这三个值)

1     3(2+1)    2

2    5(3+2)    3

3     8        5

4       13     8

double sum = 0;//累加器,求每一项的和
for(int i=0,a=2,b=1;i<20;i++){
     sum = sum + 1.0*a/b ;//累加当前分数
     /*为下一次累加做准备,即:改变分子分母的值*/
     int t = a ;//临时保存分子的值
     a = a + b ;//根据规律分子的值为a+b
     b = t ;//根据规律分母的值应该是分子的值,而分子的值已发生变化所以用之前保存的t来代替即可。
}

   

查看完整回答
1 反对 回复 2016-09-01
?
慕粉3456840

TA贡献16条经验 获得超4个赞


function addAll(a,b,n)//a 分子 b 分母
{
    var total=0,tmp=0;
    for(var i=0;i<n;i++)
    {
        total+=a/b;
        tmp=a;
        a=a+b;
        b=tmp;
    }
    return total;
}
console.log(addAll(2,1,20));就可以了

查看完整回答
反对 回复 2016-09-01
?
宝慕林9293779

TA贡献7条经验 获得超2个赞


首先这个你要先找规律。第二个数的分母是第一个的分子,第二个数的分子是第一个数的分子加分母之和。自己动手丰衣足食

查看完整回答
反对 回复 2016-09-01
  • 4 回答
  • 0 关注
  • 3317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信