web-dev-qa-db-fra.com

PHP Séquence de Fibonacci

Cette méthode php est supposée imprimer la séquence de Fibonacci jusqu'à une valeur spécifiée en utilisant une boucle for. Je ne sais pas pourquoi cela ne fonctionne pas?

<?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;
?>
7
Jesse Luke Orange

Il existe en fait un moyen de calculer un nombre de Fibonacci sans itération en arrondissant:

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

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

Fonction simple de fibonacci

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));
7
user2669208

Dans cet exemple, j'utilise une boucle for et je limite la longueur à 10:

$x = 0;    
$y = 1; 

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

Sortie:
1
2
3
5
8
13
21
34
55
.__ 89
.__ 144 

6
Sathish Jayaraman

Votre compréhension de base du fonctionnement de la langue semble erronée. Vous définissez une fonction mais ne l'appelez jamais. Vous donnez un paramètre que vous écrasez immédiatement.

Essaye ça:

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

Je sais que j'ai un an de retard, mais voici ma contribution . Il y a 2 solutions possibles:

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;
}

La première est plus élégante et calcule le résultat de la même manière que celle définie mathématiquement. Le problème est que cela coûte très cher pour les gros dollars.

Le second est beaucoup plus rapide, mais vous devez vous assurer que l’utilisateur ne définit que le premier paramètre.

Temps d'exécution: 

$ n = 20, fib1 = 0,092s, fib2 = 0,001s

$ n = 30, fib1 = 12,2827s, fib2 = 0,001s

$ n = 40, fib1 => 500s fib2 = 0.001s

2
Petr

Vous écrasez le $n que vous obtenez comme argument de fonction lorsque vous laissez $n le compteur de boucles.

Débarrassez-vous de la déclaration for-, laissez simplement le corps de celle-ci.

2
Oswald

tu as 2 sulutions 

en utilisant la boucle

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));

fonctions récursives

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

print_r(rec_fib(6));

La série de Fibonacci ressemble à:

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);

Voir plus de détail

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

C'est un fib inefficace ($ n - 1) + fib ($ n - 2); voici mes solutions avec récursion et sans. Je n'utilise pas les dictionnaires accumulés comme $ fib [1..N] = [], mais je calcule la somme des étapes et la passe à la prochaine itération ou à l'appel récursif. 

// 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;
}
1
radzserg

C'est la méthode utilisée par moi:

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);

Pour l'explication visitez ici

1
Guru
    function fibonacci( $n ) {
if (( $n == 0 ) || ( $n == 1 )) {
     return $n;
}
return fibonacci( $n-2 ) + fibonacci( $n-1 );}
1
El Niño
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);

Fibre Récursive

1
François P.

Si vous voulez le faire récursivement

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

Cette page l'a bien fait. Vous pouvez le vérifier pour des références. Merci!

<?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);

?>

Ou

<?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 " ";
}

?>
0
Gregorio
<?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);
?>
0
Sham Haramalkar

Je suis tombé sur cette question récemment et ai trouvé votre question. Vous étiez à mi-chemin alors j'ai modifié votre code en version de travail.

<?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);
0
motto

Solution: code de travail PHP pour la séquence de fibonacci

$prev = 0;
$curr = 1;
$fib = 0;
for($i=0;$i<=20;$i++){
    echo $fib . ",";               
    $prev = $curr;
    $curr = $fib;
    $fib = $prev + $curr; 
}
0
Ata ul Mustafa
    <?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,
0
Ashutosh Verma
<?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);
?>
0
Bellal Mohamed
$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 ++;
}

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

0
Balaji D
// 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);
0
Purushottam
  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
0
debasish

Celui-ci est aussi simple et rapide que possible

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

Incluez header('Content-Type: text/plain'); pour voir les onglets\t.

0
Chris K

Une approche plus lisible et non récursive:

function fibonacciSequence($max = 13) {
    if($max < 1)
        return [];

    $sequence = [];

    $older = 0;
    $newer = 1;

    do {
        $number = $newer + $older;
        $sequence[] =  $number;

        $older = $newer;
        $newer = $number;
    } while($number < $max);

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

* EDIT: Commençons par $b=1; $a=$b+$a et $b=1 => au début, nous pouvons dire $a=$b++;, puis nous mettons une limite $a<$limit; maintenant la partie la plus difficile $b+=$a=$b-$a signifie $b=$b+$a; et $a=$b-$a; Permet de gérer ce code ensemble

étape 1: a ---> 1 .... b ---> 2 // b était = 1 a = 1 => b = b + a = 1 + 1 = 2

étape 2: a ---> 1 .... b ---> 3 // b était 2 a = b-a = 2-1 = 1 => b = b + a = 2 + 1 = 3

étape 3: a ---> 2 .... b ---> 5 // b était 3 a = b-a = 3-1 = 2 => b = b + a = 3 + 2 = 5

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

0
BARIS KURT

Les fibonaccies sont si faciles à obtenir en faisant une récursion

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

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

printFibo(0, 1);
0
Den Nikitin