Skip to content

for循环中使用num变量会导致浏览器崩溃 #19

Closed
@craiiiigie

Description

@craiiiigie

Challenge Sum All Odd Fibonacci Numbers has an issue.
User Agent is: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36.
Please describe how to reproduce this issue, and include links to screenshots if possible.

My code:

function sumFibs(num) {
  var arr=[];
  var sum=0;
  arr[0]=0;
  arr[1]=1;
  for(var i=2;i<4;i++){
    arr[i]=arr[i-2]+arr[i-1];
  }
  return arr;
}

sumFibs(4);

在开始研究题目的时候发现,如果把代码中for循环里的i<4替换成i<num(或者任何变量)就会出现浏览器崩溃,测试浏览器是chrome版本 53.0.2785.143 m

Activity

RUSHtf

RUSHtf commented on Oct 19, 2016

@RUSHtf

我也是做这个算法的时候 写好代码运行然后崩溃了 结果发现是FOR循环里的Num变量导致的 。不过怎么解决啊 ,以后只要一登录这个课程页面就崩溃。。。目前只能换了个浏览器 你有啥办法吗 我的QQ是710107781 你可以联系我

huluoyang

huluoyang commented on Oct 19, 2016

@huluoyang
Contributor

确实如此,我也遇到这种情况。
i的值变大时,不仅浏览器会崩溃,在本地写代码也是如此。
先mark下,解决后再回来更新。

huluoyang

huluoyang commented on Oct 19, 2016

@huluoyang
Contributor

@RUSHtf
把这个页面关闭掉,重新打开链接:https://www.freecodecamp.cn/challenges/sum-all-odd-fibonacci-numbers
注意链接后面不要添加一大串参数,否则会导致重复死循环。

RUSHtf

RUSHtf commented on Oct 19, 2016

@RUSHtf

我试了试用 while循环 还是不行。。

RUSHtf

RUSHtf commented on Oct 19, 2016

@RUSHtf

@huluoyang
我关闭浏览器 重新打开这个链接:https://www.freecodecamp.cn/challenges/sum-all-odd-fibonacci-numbers 还是会马上崩溃 是不是只要一进去这个页面就会执行一次页面上写的代码?
有没有办法重置一下页面上的代码

huluoyang

huluoyang commented on Oct 19, 2016

@huluoyang
Contributor

@RUSHtf 不会崩溃啊,关闭这个页面即可,然后新开链接。PS.chrome

huluoyang

huluoyang commented on Oct 19, 2016

@huluoyang
Contributor

查阅大量资料,发现用递归来实现斐波那契数列是有局限性的。
num较小还可以,num较大时,函数调用层数太深,内存会溢出。
解决方法:用数组来缓存每一步的计算结果。
参考资料:http://www.cnblogs.com/meteoric_cry/archive/2010/11/29/1891241.html

RUSHtf

RUSHtf commented on Oct 19, 2016

@RUSHtf

@huluoyang
太感谢了👏👏👏

zsqosos

zsqosos commented on Oct 24, 2016

@zsqosos

你这个就是数组方法啊,浏览器崩溃是因为循环太多次,导致arr数组太大。解决方法是不要让i循环到num那么大,只需要在arr[i]大于num时跳出循环即可。

jamesbeme

jamesbeme commented on Oct 25, 2016

@jamesbeme
cllgeek

cllgeek commented on Oct 27, 2016

@cllgeek

我一开始也遇到了这个问题,然后我换了代码就解决了,代码如下:

var sumFibs = function() {
    var cache = [1, 1];
    return function (n) {
        if (n >= cache.length) {
            for (var i = cache.length; i < n ; i++ ) {
                cache[i] = cache[i - 2] + cache[i - 1];
            }
        }
        var arr=cache.filter(function(val){
           return val%2!=0&&val<=n;
         });
        return arr.reduce(function(pre,next){
          return pre+next;
        });
    };

}();

sumFibs(400);

craiiiigie

craiiiigie commented on Nov 3, 2016

@craiiiigie
Author

后来我也是更改了代码通过的,当时是想搞清崩溃的原因是不是因为循环次数,感谢各位解答!

KKenny0

KKenny0 commented on Nov 5, 2016

@KKenny0

谢谢各位的解答。

Andy201512

Andy201512 commented on Jan 4, 2017

@Andy201512

应该不是循环次数的原因,而是数组大小的原因,刚刚去FreeCodeCamp的仓库那边看了相关issues,好像 new Array(1000000).join(); 也能让页面冻结 。我也写错循环,导致数组太大,然后页面就一直崩溃了,换个浏览器变回初始的代码就能进去了。我觉得清理浏览器对这个网站的缓存应该也是可行的,因为自己写的代码只缓存在本地。

5 remaining items

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @huluoyang@discountry@cllgeek@Andy201512@KKenny0

        Issue actions

          for循环中使用num变量会导致浏览器崩溃 · Issue #19 · FreeCodeCampChina/freecodecamp.cn