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;
?>
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));
}
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));
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
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.", ";
}
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
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.
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);
function fib($m){
$j=0;$k=1;
for($i=0;$i<=$m;$i++){
$l=$k;
$k=$j+$k;
$j=$l;
}
return $k;
}
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;
}
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
function fibonacci( $n ) {
if (( $n == 0 ) || ( $n == 1 )) {
return $n;
}
return fibonacci( $n-2 ) + fibonacci( $n-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);
Fibre Récursive
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);
}
}
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 " ";
}
?>
<?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);
?>
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);
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;
}
<?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,
<?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);
?>
$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
// 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);
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
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.
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;
}
<?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
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);