8

このphpメソッドは、forループを使用して指定された値までフィボナッチ数列を出力することを想定しています。なぜ機能しないのかわかりませんか?

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

34 に答える 34

42

丸めを使用して、反復せずにフィボナッチ数を計算する方法が実際にあります。

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

function getFib($n)
{
    return round(pow((sqrt(5)+1)/2, $n) / sqrt(5));
}
于 2014-11-28T13:57:59.463 に答える
8

フィボナッチのシンプルな機能

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));
于 2013-08-09T20:38:57.030 に答える
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
89144

于 2014-04-17T06:34:59.820 に答える
3

言語がどのように機能するかについてのあなたの基本的な理解は間違っているようです。関数を定義していますが、呼び出すことはありません。あなたはすぐに上書きするパラメータを与えています。

これを試して:

$fib = [1,0];
for($i=0; $i<30; $i++) {
    $next = array_sum($fib);
    array_shift($fib);
    array_push($fib,$next);
    echo $next.", ";
}
于 2013-03-24T15:09:21.563 に答える
3

私は1年遅れていることを知っていますが、ここに私の貢献があります。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に対して非常に高価であるということです。

2つ目ははるかに高速ですが、ユーザーが最初のパラメーターのみを設定するようにする必要があります。

実行時間:

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

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

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

于 2014-03-13T06:29:50.333 に答える
3

あなたは2つのsulutionsを持っています

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));
于 2018-08-23T07:21:45.440 に答える
2

ループカウンターにすると、$n関数の引数として取得したものを上書きします。$n

-ステートメントを取り除き、for本文だけを残します。

于 2013-03-24T15:09:37.383 に答える
1
function fib($m){
    $j=0;$k=1;
    for($i=0;$i<=$m;$i++){
          $l=$k;
          $k=$j+$k;
          $j=$l;
      }
   return $k;
}
于 2013-10-02T05:23:45.380 に答える
1
    function fibonacci( $n ) {
if (( $n == 0 ) || ( $n == 1 )) {
     return $n;
}
return fibonacci( $n-2 ) + fibonacci( $n-1 );}
于 2014-12-13T14:39:53.773 に答える
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);

説明についてはこちらをご覧ください

于 2015-06-18T13:39:54.210 に答える
1

より読みやすく、再帰的でないアプローチ:

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;
}
于 2015-08-21T13:27:52.017 に答える
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

于 2016-07-01T10:57:10.510 に答える
1

フィボナッチ数列は次のようになります。

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

詳細を表示

于 2017-01-18T20:43:12.927 に答える
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;
}
于 2017-02-06T13:33:04.287 に答える
0

再帰的にやりたい場合

function fib($n, $first, $second) {
    if( $n > 0 ) {
         $sum = $first + $second;
         $first = $second;
         $second = $sum;
         print $sum;
         fib($n-1, $first, $second);
    }
}
于 2013-03-24T15:36:56.800 に答える
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

于 2013-12-19T18:28:16.897 に答える
0

解決策:フィボナッチ数列のPHPコードの動作

$prev = 0;
$curr = 1;
$fib = 0;
for($i=0;$i<=20;$i++){
    echo $fib . ",";               
    $prev = $curr;
    $curr = $fib;
    $fib = $prev + $curr; 
}
于 2014-11-12T18:11:48.140 に答える
0

これは私が作ることができるのと同じくらい速くて簡単です

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

header('Content-Type: text/plain');\tタブを表示するにはインクルードします。

于 2015-03-24T02:42:38.413 に答える
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);
于 2015-04-05T17:46:02.100 に答える
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;$b+=$a=$b-$a$b=$b+$a;$a=$b-$a;

ステップ1:a ---> 1 .... b ---> 2//bは=1a = 1 => b = b + a = 1 + 1 = 2

ステップ2:a ---> 1 .... b ---> 3//bは2でしたa=ba = 2-1 = 1 => b = b + a = 2 + 1 = 3

ステップ3:a ---> 2 .... b ---> 5//bは3でしたa=ba = 3-1 = 2 => b = b + a = 3 + 2 = 5

出力:1 1 2 3 5 8 13 21 34 55 89144233377

于 2017-03-02T03:12:28.917 に答える
0

このページはうまくいきました。参考までにチェックしてください。ありがとう!

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

?>
于 2017-07-06T09:59:50.783 に答える
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);
?>
于 2017-07-31T16:35:21.573 に答える
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);
?>
于 2017-10-21T22:08:46.333 に答える
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
于 2018-01-05T07:23:44.870 に答える
0

Fibonacciesは、再帰を行うことで簡単に取得できます

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

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

printFibo(0, 1);
于 2018-06-23T20:47:25.240 に答える
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);
于 2018-12-17T10:35:20.433 に答える
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を再帰的なフィボナッチ関数に渡して、コンピューターが溶けるのを見てください:-)

于 2019-05-17T10:44:52.540 に答える
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>";
于 2019-10-28T12:05:04.800 に答える
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;
}
于 2020-02-03T09:32:06.880 に答える
0

フィボナッチ数列は次のようになります:1、2、3、5、8、13、21、34、55、89、144前の2つの値を加算し、出力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 ; 
}
?>
于 2020-07-27T10:21:53.127 に答える
0

これを試して:

        function fibonacci($length)
    {
        $result = [];
    
        function start($index, $a = 0, $b = 1)
        {
            if ($index === 0) {
                return $a;
            }
    
            if ($index === 1) {
                return $b;
            }
    
            return start( $index- 1, $b, $a + $b);
        }
    
        for ($i = 0; $i <= $length; $i++) {
            $result[$i] = start($i);
        }
    
        return $result;
    }

var_dump(fibonacci(20));
于 2021-09-14T00:03:33.127 に答える
-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));  
于 2013-03-24T15:24:08.607 に答える
-1
    <?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,
于 2018-07-14T00:33:11.253 に答える
-2

鉱山はfibonaciiシリーズを入手する簡単な方法です。これをチェックしてください:

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

    echo $a;
    for ($i=0; $i < 10; $i++) { 
        echo ' '.$b.' ';
        $sum = $a + $b;
        $a = $b;
        $b = $sum;
    }
}
于 2017-11-23T09:57:23.757 に答える