如何解决PHP For循环INF内存问题
这段代码的问题是,当for循环执行时,内存使用量不断增加。例如,当我使用较小的如何解决PHP For循环INF内存问题,php,for-loop,memory,methods,Php,For Loop,Memory,Methods,这段代码的问题是,当for循环执行时,内存使用量不断增加。例如,当我使用较小的$seq_limit1000运行代码时,它会完美地执行。但是,当代码以1500的$seq\u limit值运行时,它返回INF。我该如何解决这个问题?下面是我的代码 <?php class fibonacci { private $seq_limit; private $sequence = array(1,2); private $even_values = array();
$seq_limit
1000运行代码时,它会完美地执行。但是,当代码以1500的$seq\u limit
值运行时,它返回INF。我该如何解决这个问题?下面是我的代码
<?php
class fibonacci {
private $seq_limit;
private $sequence = array(1,2);
private $even_values = array();
private $sum_even;
public function __construct(int $seq_limit){
$this->seq_limit = $seq_limit;
}
public function fibonacci_sequence(){
for ($i=0; $i<=$this->seq_limit-3; $i++) {
$this->sequence[] = $this->sequence[$i] + $this->sequence[$i+1];
}
return $this->sequence;
}
public function even_values(){
foreach ($this->fibonacci_sequence() as $value) {
if ($value % 2 == 0) {
$this->even_values[] = $value;
}
}
return $this->even_values;
}
public function sum_even(){
foreach ($this->even_values() as $value) {
$this->sum_even += $value;
}
return $this->sum_even;
}
}
$fibonacci = new fibonacci(1500);
echo $fibonacci->sum_even();
?>
即使以不耗尽内存的方式实现,第1500个斐波那契数也是
1.355E313
。这是一个314位的数字。可表示的最大双精度浮点数约为1.8E308
。如果你想超越这些,你需要使用一个特殊的库,比如BCmath来处理这么大的数字。不会很快
也就是说,要生成斐波那契序列,唯一需要知道的是最后两个数字是什么。你的记忆力在不断增长,因为你在不断增加
或者,使用简单的生成器函数:
函数fib_gen(){
产量1;
产量1;
$state=[1,1];
$offset=2;
while(true){
$v=数组和($state);
收益率$v;
$state[$offset%2]=$v;
++$offset;
}
}
$c=1;
$sum=0;
$sum_偶数=0;
$start=microtime(真);
foreach(fib_gen()作为$f){
//printf(“%4d:%d\n”,$c,$f);
$sum+=$f;
如果($c%2==0){$sum_偶数+=$f;}
如果($c++>=1000){break;}
}
$end=微时间(真);
printf(“总和:%s\n单位偶数:%s\n长度:%f毫秒\n峰值内存:%d kB\n”,
$sum,$sum_偶数,($end-$start)*1000,内存获取峰值使用率()/1024
);
输出:
sum: 1.1379692539836E+209
sum_even: 7.0330367711423E+208
duration: 1.071930 ms
peak mem: 416 kB