PHP斐波纳契数列

时间:2013-03-24 15:05:08

标签: php for-loop

这个php方法假设使用for循环将Fibonacci序列打印到指定值。我不确定为什么它不起作用?

<?php
function fib ($n) { // a function called fib, declaire variable n (the sequence number)
    for ($n=0;$n<30;$n++) {
        if ($n < 3) { return $n; } // if n is smaller than 3 return n (1 or 2)
        else { return fib ($n - 1) + fib ($n - 2); } 
    /* if the number is 3 or above do 2 sums (n-1) and (n-2)
    and then add the 2 sums together (n-1)+(n-2)
    Example Fibonacci number 4
    (4-1)+(4-2) = 5
    3 + 2 = 5
    */
}
print $n;
?>

33 个答案:

答案 0 :(得分:32)

实际上有一种方法可以通过使用舍入来计算斐波纳契数而不进行迭代:

http://en.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding

function getFib($n)
{
    return round(pow((sqrt(5)+1)/2, $n) / sqrt(5));
}

答案 1 :(得分:7)

斐波纳契的简单功能

function fibonacci($n,$first = 0,$second = 1)
{
    $fib = [$first,$second];
    for($i=1;$i<$n;$i++)
    {
        $fib[] = $fib[$i]+$fib[$i-1];
    }
    return $fib;
}
echo "<pre>";
print_r(fibonacci(50));

答案 2 :(得分:6)

在这个例子中,我使用for循环并将长度限制为10:

$x = 0;    
$y = 1; 

for($i=0;$i<=10;$i++)    
{    
    $z = $x + $y;    
    echo $z."<br />";         
    $x=$y;       
    $y=$z;     
}   

<强>输出:
1
2
3
5
8
13个
21个
34个
55个
89个
144

答案 3 :(得分:2)

当你让$n成为循环计数器时,你正在覆盖你得到的$n函数参数。

摆脱for - 声明,只留下它的主体。

答案 4 :(得分:2)

您有2个解决方案

  

使用for循环

function fib($n) {
    $fib_array = [0, 1];
    for ($i = 2; $i < $n; $i++) {
        $fib_array[$i] = $fib_array[$i - 1] + $fib_array[$i - 2];
    }
    return $fib_array;
}

print_r(fib(6));
  

递归函数

function rec_fib($x) {
    if ($n < 2) {
        return $n;
    }
    return fib($n - 1) + fib($n - 2);
}

print_r(rec_fib(6));

答案 5 :(得分:2)

您对语言运作方式的基本理解似乎是错误的。你正在定义一个函数,但从不调用它。您正在提供一个参数,然后立即覆盖。

试试这个:

$fib = [1,0];
for($i=0; $i<30; $i++) {
    $next = array_sum($fib);
    array_shift($fib);
    array_push($fib,$next);
    echo $next.", ";
}

答案 6 :(得分:2)

我知道我迟到了一年,但这是我的贡献。 有两种可能的解决方案:

function fib1($n)
{
    return $n < 3 ? 1 : fib1($n - 1) + fib1($n - 2);
}
function fib2($n, $c = 2, $n2 = 0, $n1 = 1)
{
    return $c < $n ? fib2($n, $c + 1, $n1, $n1 + $n2) : $n1 + $n2;
}

第一个更优雅,并以数学方式计算结果。问题是对于大$ n来说这是非常昂贵的。

第二个更快,但你必须确保用户只设置第一个参数。

执行时间:

  

$ n = 20,fib1 = 0.092s,fib2 = 0.001s

     

$ n = 30,fib1 = 12.2827s,fib2 = 0.001s

     

$ n = 40,fib1 =&gt; 500s fib2 = 0.001s

答案 7 :(得分:1)

function getFib($n, $nN, $ct = 0, $max = 100)
 {
     $ct++;
     echo "$nN \n";
     ($ct < $max) ? getFib($nN, $n+$nN, $ct) : die();

 }

 echo 0;
 getFib(0, 1);

递归Fib

答案 8 :(得分:1)

这是效率低的fib($ n - 1)+ fib($ n - 2);这是我的递归和没有的解决方案。我没有使用像$ fib [1..N] = []这样的累积字典,但我计算了步长并将其传递给下一次迭代或递归调用。

// with recursion 
function fib($n, $a = 0, $b = 1) {
    if ($n < 1) {
        return $a;
    }        

    return fib($n - 1, $b, $a + $b);
}


// with simple loop
function fib($N) {
    $a = 0;
    $b = 1;
    for ($i = 0; $i < $N; $i++) {
        $t = $a + $b;
        $a = $b;
        $b = $t;
    }
    return $a;
}

答案 9 :(得分:1)

Fibonacci系列看起来像:

0,1,1,2,3,5,8,13,21,34,

function fabnacaiiSeries($num){
    $first=0;$second=1;
    for($i=0;$i<$num;$i++){
        if($i<=1){
            $next=$i;
        }  else  {
            $next=$first+$second;
            $first=$second;
            $second=$next;
        }

        echo  $next." , ";
    }   
}

fabnacaiiSeries(10);

View more detail

答案 10 :(得分:1)

这是我使用的方法:

function fibonacci_series($n) {
  $f1 = -1;
  $f2 = 1;

  for ($i = 1; $i <= $n; $i++) {
    $f = $f1 + $f2;
    $f1 = $f2;
    $f2 = $f;
    echo "$f<br />"; 
  }
 }

echo fibonacci_series(5);

有关说明,请访问here

答案 11 :(得分:1)

function fib($m){
    $j=0;$k=1;
    for($i=0;$i<=$m;$i++){
          $l=$k;
          $k=$j+$k;
          $j=$l;
      }
   return $k;
}

答案 12 :(得分:1)

    function fibonacci( $n ) {
if (( $n == 0 ) || ( $n == 1 )) {
     return $n;
}
return fibonacci( $n-2 ) + fibonacci( $n-1 );}

答案 13 :(得分:0)

<?php
    function generateFibonacci($n, $previous = 0, $current = 1) {
        echo $previous == 0 ? $previous.'<br />'.$current.'<br />' : $current . '<br />';

        return $n == 1 ? null : generateFibonacci($n - 1, $current, $previous + $current);
    }

    generateFibonacci(20);
?>

答案 14 :(得分:0)

斐波那契系列看起来像: 1,2,3,5,8,13,21,34,55,89,144 意味着如果您将前两个值相加并且输出show是下一个值。

1 + 2 = 3 3 + 5 = 8 像这样 如何在PHP中实现此类输出

<?php
$num1 = 0 ; 
$num2 = 1 ; 

for ($i=0; $i<=10 ; $i++) { 
    # Foboniici
    $result = $num1 + $num2 ; 
    $num1 = $num2 ; 
    $num2 = $result ; 
    echo $result ; 
}
?>

答案 15 :(得分:0)

$first=0;
$second=1;
$nex=0;
$num=10;
for($c=0;$c<$num;$c++)
{
    if($c<=1)
    {
       $next=$c; 
    }
    else
    {
    $next=$first+$second;
    $first=$second;
    $second=$next;    
    }
    echo $next;
}

答案 16 :(得分:0)

<?php

function fibonacciSequence($pos){

    $fibarray = array(0, 1);

   for ( $i=2; $i<=$pos; ++$i ) {
       $fibarray[$i] = $fibarray[$i-1] + $fibarray[$i-2];
   }

   return $fibarray;
}

echo "<pre>";
print_r(fibonacciSequence(5));
echo "<pre>";

答案 17 :(得分:0)

前几天,我被要求写一个斐波那契函数。我考虑过递归,但当时我认为这样做效率不高。

我最终这样写了我的文章:

function fib ($num) {
    $count = 0;
    $current = 0;
    $one_back = 0;
    $two_back = 0;

    while ($count <= $num) {    
        $current = $one_back + $two_back;
        $two_back = $two_back ? $one_back : 1;
        $one_back = $current;
        $count++;
    }

    return $current;
}

他们只想要最终答案,尽管显然可以很容易地修改它以将每次迭代推入数组。

后来,我针对递归版本进行了测试...我的速度更快。

如果$ num> 1476,则返回INF,因此我假设这是您达到php的最大整数值的地方。

为了娱乐,将1476传递给递归斐波那契函数,然后观察计算机融化:-)

答案 18 :(得分:0)

// Use this
 function printFibonacci($n)
 {

  $first = 0;
  $second = 1;

  echo "Fibonacci Series n => ";

  echo $first.' '.$second.' ';

  for($counter = 2; $counter < $n; $counter++){

    $third = $first + $second;

    echo $third.' ';

    $first = $second;
    $second = $third;

    }
}

/* Function call to print Fibonacci series upto 10 numbers. */

printFibonacci(10);

答案 19 :(得分:0)

    <?php
echo"Ashutosh Verma Branch_IT_9889313834";
echo"<br />";
echo "Fibonacci Series Up to 10th term is:-"."<br />";
$fibonacci=0;
$a=0;
$b=1;
echo $a.",";
echo $b.",";
while($fibonacci<20)
{
$c=$a+$b;
echo $c.",";
$a=$b;
$b=$c;
$fibonacci=$fibonacci + 1;
}
?>
------------------------------------------OUTPUT-------------------------------------
Ashutosh Verma Branch_IT_9889313834
Fibonacci Series Up to 10th term is:-
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,

答案 20 :(得分:0)

通过递归很容易获得斐波那契

function printFibo($prev, $next) {
   if($prev > 10000000000000) return;
   $num = $prev + $next;

   echo "$num<br>";
   printFibo($next, $num); 
}

printFibo(0, 1);

答案 21 :(得分:0)

  class fibonacci
   {

   public $x = 0;
   public $y = 1;

   public function fibonacci() {
    for ($i = 0; $i <= 10; $i++) {
     $z = $this->x + $this->y;
     echo $z;
     echo "<br>";
     $this->x = $this->y;
     $this->y = $z;
    }

   }

   }

  $objfib = new fibonacci();
///Output
1
2
3
5
8
13
21
34
55
89
144

答案 22 :(得分:0)

<?php
$num = array(0, 1);

for ($i=0; $i<=10; $i++) 
{
   $new_num = $num[$i-1] + $num[$i-2];
   array_push($num, $new_num);
}

echo implode(', ',$num);
?>

答案 23 :(得分:0)

This page做得很好。您可以查看它以获取参考。谢谢!

<?php

function printFibonacci($n)
{

  $first = 0;
  $second = 1;

  echo "Fibonacci Series \n";

  echo $first.' '.$second.' ';

  for($i = 2; $i < $n; $i++){

    $third = $first + $second;

    echo $third.' ';

    $first = $second;
    $second = $third;

  }
}

/* Function call to print Fibonacci series upto 6 numbers. */

printFibonacci(6);

?>

或者

<?php

define('NUM',11);
$a = 0;
$b = 1;

echo "$a $b "; // 0 1

for($i=1   ; $i<= NUM-2 ;  $a=$b, $b=$c, $i++ ) 
{
  echo $c = $a+$b;
  echo " ";
}

?>

答案 24 :(得分:0)

    <?php
    $b=1; $limit=500;
    for($a=$b++;$a<$limit;$b+=$a=$b-$a)    
    {    
       echo"$a<br>"; 
      }   
   ?>

*编辑:让我们从$b=1; $a=$b+$a$b=1 =>开始,我们可以说$a=$b++;然后我们设置限制$a<$limit;现在最难的部分{{ 1}}表示$b+=$a=$b-$a$b=$b+$a; 让我们一起操作这段代码,玩得开心

步骤1:a ---&gt; 1 .... b ---&gt; 2 // b = 1 a = 1 =&gt; B = B + A = 1 + 1 = 2

步骤2:a ---&gt; 1 .... b ---&gt; 3 // b为2 a = b-a = 2-1 = 1 =&gt; B = B + A = 2 + 1 = 3

步骤3:a ---&gt; 2 .... b ---&gt; 5 // b为3 a = ba = 3-1 = 2 =&gt; b = b + a = 3 + 2 = 5

  

输出:1 1 2 3 5 8 13 21 34 55 89 144 233 377

答案 25 :(得分:0)

如果你想以递归方式进行

function fib($n, $first, $second) {
    if( $n > 0 ) {
         $sum = $first + $second;
         $first = $second;
         $second = $sum;
         print $sum;
         fib($n-1, $first, $second);
    }
}

答案 26 :(得分:0)

$count = 0;
$x = 0;
$y = 1;

echo $x."<br />";
echo $y."<br />";

while($count < 10) {
    $z = $x + $y;
    echo $z."<br />";
    $x = $y;
    $y = $z;
    $count ++;
}

参考:http://blog.innovsystems.com/php/fibonacci-series-program-php

答案 27 :(得分:0)

更易读,非递归的方法:

    if(Msg.equalsIgnoreCase("")) { // OR if(Msg.equals("")) 
        resultView.setVisibility(View.GONE);
   } else{    
        resultView.setVisibility(View.VISIBLE);
        resultView.setText("Error :" + Msg);
    }

答案 28 :(得分:0)

解决方案:使用斐波纳契序列的PHP代码

$prev = 0;
$curr = 1;
$fib = 0;
for($i=0;$i<=20;$i++){
    echo $fib . ",";               
    $prev = $curr;
    $curr = $fib;
    $fib = $prev + $curr; 
}

答案 29 :(得分:0)

我最近遇到了这个问题并找到了你的问题。你在中途,然后我将你的代码修改为工作版本。

<?php

function fib ($n) { // a function called fib, declaire variable n (the sequence number)
    if($n==0) return 0;
    if ($n < 3) { return 1; } // if n is smaller than 3 return n (1 or 2)
    else { return fib ($n - 1) + fib ($n - 2); }
    /* if the number is 3 or above do 2 sums (n-1) and (n-2)
    and then add the 2 sums together (n-1)+(n-2)
    Example Fibonacci number 4
    (4-1)+(4-2) = 5
    3 + 2 = 5
    */

}

        echo fib(50);

答案 30 :(得分:0)

这个和我一样简单快捷

function fibonacci($n, $rec = 0) {
    echo "$n\t";
    fibonacci($n + $rec, $n);
}
echo fibonacci(1);

包含header('Content-Type: text/plain');以查看\ t标签。

答案 31 :(得分:-1)

试试这个。优化功能

function fib($n, $all=0){
f[0] = 1;
f[1] = 1;
for($i = 2; $i<= $n; $i++) f[$i] = f[$i-1]+f[$i-2];
if($all) return $f;
return $f[$n];
}

print fib(5);
var_dump(fib(5, 1));  

答案 32 :(得分:-2)

Mine是获取斐波那契系列的一种简单方法,请查看:

function fibo() {
    $a = 0;
    $b = 1;

    echo $a;
    for ($i=0; $i < 10; $i++) { 
        echo ' '.$b.' ';
        $sum = $a + $b;
        $a = $b;
        $b = $sum;
    }
}