Diese PHP-Methode setzt voraus, dass die Fibonacci-Sequenz mit einer for-Schleife bis zu einem angegebenen Wert gedruckt wird. Ich bin nicht sicher, warum es nicht funktioniert.
<?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;
?>
Es gibt tatsächlich eine Möglichkeit, eine Fibonacci-Zahl ohne Iteration durch Runden zu berechnen:
http://en.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding
function getFib($n)
{
return round(pow((sqrt(5)+1)/2, $n) / sqrt(5));
}
Einfache Funktion von 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));
In diesem Beispiel verwende ich eine for-Schleife und beschränke die Länge auf 10:
$x = 0;
$y = 1;
for($i=0;$i<=10;$i++)
{
$z = $x + $y;
echo $z."<br />";
$x=$y;
$y=$z;
}
Ausgabe:
1
2
3
5
8
13
21
34
55
89
144
Ihr grundlegendes Verständnis für die Funktionsweise der Sprache scheint falsch zu sein. Sie definieren eine Funktion, rufen sie aber nie auf. Sie geben einen Parameter an, den Sie sofort überschreiben.
Versuche dies:
$fib = [1,0];
for($i=0; $i<30; $i++) {
$next = array_sum($fib);
array_shift($fib);
array_Push($fib,$next);
echo $next.", ";
}
Ich weiß, dass ich 1 Jahr zu spät komme, aber hier ist mein Beitrag ... Es gibt 2 mögliche Lösungen:
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;
}
Der erste ist eleganter und berechnet das Ergebnis genauso wie es mathematisch definiert wird. Das Problem ist, dass es für große $ n sehr teuer ist.
Der zweite ist viel schneller, aber Sie müssen sicherstellen, dass der Benutzer nur den ersten Parameter einstellt.
Ausführungszeit:
$ n = 20, Fib1 = 0,092s, Fib2 = 0,001s
$ n = 30, Fib1 = 12,2827s, Fib2 = 0,001s
$ n = 40, fib1 => 500s fib2 = 0,001s
Sie überschreiben den $n
, den Sie als Funktionsargument erhalten, wenn Sie $n
als Schleifenzähler verwenden.
Befreien Sie sich von der for
- Anweisung, lassen Sie nur den Hauptteil davon.
du hast 2 Lösungen
for-Schleife verwenden
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));
rekursive Funktionen
function rec_fib($x) {
if ($n < 2) {
return $n;
}
return fib($n - 1) + fib($n - 2);
}
print_r(rec_fib(6));
Fibonacci-Serie sieht aus wie:
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;
}
Dies ist ineffizientes fib ($ n - 1) + fib ($ n - 2); Hier sind meine Lösungen mit Rekursion und ohne. Ich verwende keine angesammelten Wörterbücher wie $ fib [1..N] = [], aber ich berechne die Stufensumme und leite sie an den nächsten Wiederholungs- oder Rekursionsaufruf weiter.
// 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;
}
Dies ist die von mir verwendete Methode:
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);
Zur Erklärung besuchen Sie hier
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);
Rekursive Fib
Ich wurde neulich gebeten, eine Fibonacci-Funktion in einem Interview zu schreiben. Ich dachte über eine Rekursion nach, dachte aber damals, dass dies ineffizient wäre.
Am Ende habe ich meine so geschrieben:
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;
}
Sie wollten nur die endgültige Antwort, obwohl sie offensichtlich leicht modifiziert werden könnte, um jede Iteration auf ein Array zu übertragen.
Später habe ich meine gegen eine rekursive Version getestet ... meine ist schneller.
Wenn $ num> 1476 ist, gibt es INF zurück, also gehe ich davon aus, dass Sie dort den maximalen Integer-Wert von php treffen.
Verwandle 1476 zum Spaß in eine rekursive Fibonacci-Funktion und beobachte, wie dein Computer schmilzt :-)
Wenn Sie es rekursiv machen wollen
function fib($n, $first, $second) {
if( $n > 0 ) {
$sum = $first + $second;
$first = $second;
$second = $sum;
print $sum;
fib($n-1, $first, $second);
}
}
Diese Seite hat es gut gemacht. Sie können es auf Referenzen überprüfen. Vielen Dank!
<?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);
?>
Oder
<?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);
?>
Ich bin kürzlich auf diese Frage gestoßen und habe Ihre Frage gefunden. Sie waren auf halbem Weg, dann habe ich Ihren Code in eine funktionierende Version geändert.
<?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);
Lösung: PHP Code für Fibonacci-Sequenz arbeiten
$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 ++;
}
Siehe: 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
Dieses ist so schnell und so einfach wie ich es machen könnte
function fibonacci($n, $rec = 0) {
echo "$n\t";
fibonacci($n + $rec, $n);
}
echo fibonacci(1);
Fügen Sie header('Content-Type: text/plain');
hinzu, um die Registerkarten\t anzuzeigen.
Ein besser lesbarer, nicht rekursiver Ansatz:
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>";
}
?>
* BEARBEITEN: Beginnen wir mit $b=1; $a=$b+$a
und $b=1 =>
. Am Anfang können wir $a=$b++;
sagen. Dann setzen wir ein Limit $a<$limit;
, und der härteste Teil $b+=$a=$b-$a
bedeutet $b=$b+$a;
und $a=$b-$a;
.__
schritt 1: a ---> 1 .... b ---> 2 // b war = 1 a = 1 => b = b + a = 1 + 1 = 2
schritt 2: a ---> 1 .... b ---> 3 // b war 2 a = b-a = 2-1 = 1 => b = b + a = 2 + 1 = 3
schritt 3: a ---> 2 .... b ---> 5 // b war 3 a = b-a = 3-1 = 2 => b = b + a = 3 + 2 = 5
ausgabe: 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Fibonaccies sind durch Rekursion so leicht zu bekommen
function printFibo($prev, $next) {
if($prev > 10000000000000) return;
$num = $prev + $next;
echo "$num<br>";
printFibo($next, $num);
}
printFibo(0, 1);