我知道这可能是一些PHP 101的东西,但我在这里做PHP 101,我不知道如何处理这个问题。我有一个简单的脚本,它将Fibonacci序列产生到20个位置,但我想将这些结果返回到索引数组中,然后找到这些结果的平均值。
以下是代码:
<?php
$num = 0;
$n1 = 0;
$n2 = 1;
echo "<h3>Fibonacci series for first 20 numbers: </h3>";
echo "\n";
echo $n1.' '.$n2.' ';
while ($num < 19 ){
$n3 = $n2 + $n1;
echo $n3.' ';
$n1 = $n2;
$n2 = $n3;
$num = $num + 1;
};
?>
我讨厌让人们为我解决我的问题,但鉴于我是PHP的新手,我真的不确定如何继续前进。
答案 0 :(得分:2)
简单代码:
// ...previous code
$result = array();
while ($num < 19 )
{
$n3 = $n2 + $n1;
echo $n3.' ';
$n1 = $n2;
$n2 = $n3;
$num = $num + 1;
// push to array $result
$result[]= $n3;
};
echo '<h4>Average : '. array_sum($result) / count($result) .'</h4>';
答案 1 :(得分:1)
<?php
$length = 20;
$fibs = [0, 1];
for($i=2; $i<$length; $i++)
$fibs[$i] = $fibs[$i-1] + $fibs[$i-2];
print implode(',', $fibs) . "\n";
printf(
'The mean average of first %d fibonacci numbers is %f.',
$length,
array_sum($fibs)/$length
);
输出:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181
The mean average of first 20 fibonacci numbers is 547.250000.
此外,我们可以将for循环减少为空语句。这是一个为Fibonacci序列生成项目数组的函数:
function fibonacci_sequence($length)
{
for(
$fibs = [0, 1], $i = 2;
$i < $length;
$fibs[$i] = $fibs[$i-1] + $fibs[$i-2], $i++
);
return array_slice($fibs, 0, $length);
}
答案 2 :(得分:1)
递归对于这个任务来说可能有点过头了,但我想我会玩它并编写一个不使用任何数组的方法。
代码:(Demo)
function fibonacci($iterations,$carry=1,$last=0){
if(--$iterations>1){$carry+=fibonacci($iterations,$carry+$last,$carry);} // control iterations & recurse
return $carry; // return the sum
}
$stop=20;
echo fibonacci($stop)/$stop; // call function
输出:
547.25
答案 3 :(得分:0)
使用array_push()函数将一个或多个元素插入到数组的末尾。
<pre>
<?php
$num = 0;
$n1 = 0;
$n2 = 1;
$arr=array();
echo "<h3>Fibonacci series for first 20 numbers: </h3>";
echo "\n";
echo $n1.' '.$n2.' ';
array_push($arr, $n1);
array_push($arr, $n2);
while ($num < 18 )
{
$n3 = $n2 + $n1;
array_push($arr, $n3);
echo $n3.' ';
$n1 = $n2;
$n2 = $n3;
$num = $num + 1;
};
echo "<br>";
print_r($arr);
$Average= array_sum($arr);
$Average=(int)($Average / count($arr));
echo $Average;
?>
</pre>