Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我一直很高兴地使用MATLAB解决一些项目Euler问题。昨天,我编写了一些代码来解决这些问题之一( 14 )。当我编写包含长循环的代码时,我总是通过短循环运行它来测试代码。如果运行正常,并且可以执行预期的操作,则我认为循环的长度较长时也会出现这种情况。
这个假设被证明是错误的。在执行以下代码时,MATLAB在第75000次迭代中的某个地方耗尽了内存。 c=1; e=1000000; for s=c:e n=s; t=1; while n>1 a(s,t)=n; if mod(n,2) == 0 n=n/2; else n=3*n+1; end a(s,t+1)=n; t=t+1; end end 我该怎么做才能防止这种情况发生?我是否需要清除变量或释放进程中的内存?将生成的矩阵a保存到硬盘驱动器会有所帮助吗? 回答: 这是解决方案,请与代码保持尽可能的距离(这非常接近,主要区别在于您只需要一维矩阵): c=1; e=1000000; a=zeros(e,1); for s=c:e n=s; t=1; while n>1 if mod(n,2) == 0 n=n/2; else n=3*n+1; end t=t+1; end a(s)=t; end [fg]=max(a); 这需要几秒钟(请注意预分配),结果g解锁Euler 14门。 更多&回答... |
![]() |
![]() |