この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;
?>
丸めを使用して反復なしでフィボナッチ数を計算する方法は実際にあります。
http://en.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding
function getFib($n)
{
return round(pow((sqrt(5)+1)/2, $n) / sqrt(5));
}
フィボナッチの簡単な機能
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));
この例では、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
あなたには2つの解決策があります
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));
言語がどのように機能するかについてのあなたの基本的な理解は間違っているようです。関数を定義していますが、それを呼び出すことはありません。あなたはすぐに上書きするパラメーターを与えています。
これを試して:
$fib = [1,0];
for($i=0; $i<30; $i++) {
$next = array_sum($fib);
array_shift($fib);
array_Push($fib,$next);
echo $next.", ";
}
私は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 => 500秒fib2 = 0.001秒
$n
をループカウンターにすると、関数の引数として取得した$n
が上書きされます。
for
ステートメントを削除し、本文のみを残します。
フィボナッチシリーズは次のようになります。
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;
}
これは非効率的な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;
}
これは私が使用する方法です:
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);
説明については こちら をご覧ください
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);
再帰的なFib
先日のインタビューでフィボナッチ関数を書くように言われました。再帰について考えましたが、当時は非効率だと思いました。
私は次のように私のものを書いてしまいました:
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を再帰的なフィボナッチ関数に渡し、コンピューターが溶けるのを見てください:-)
再帰的にやりたい場合
function fib($n, $first, $second) {
if( $n > 0 ) {
$sum = $first + $second;
$first = $second;
$second = $sum;
print $sum;
fib($n-1, $first, $second);
}
}
このページ うまくいきました。参考にしてください。ありがとう!
<?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 " ";
}
?>
<?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);
?>
私は最近この質問に出くわし、あなたの質問を見つけました。あなたは途中にいたので、コードを作業バージョンに変更しました。
<?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);
解決策:機能PHPフィボナッチ数列のコード
$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 ++;
}
参照: 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
これは私が作ることができるのと同じくらい速くて簡単です
_function fibonacci($n, $rec = 0) {
echo "$n\t";
fibonacci($n + $rec, $n);
}
echo fibonacci(1);
_
header('Content-Type: text/plain');
を含めると、\ tタブが表示されます。
より読みやすく、非再帰的なアプローチ:
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>";
}
?>
*編集:最初に$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は= 1 a = 1 => b = b + a = 1 + 1 = 2でした
ステップ2:a ---> 1 .... b ---> 3 // bは2だったa = b-a = 2-1 = 1 => b = b + a = 2 + 1 = 3
ステップ3:a ---> 2 .... b ---> 5 // b was 3 a = b-a = 3-1 = 2 => b = b + a = 3 + 2 = 5
出力:1 1 2 3 5 8 13 21 34 55 89 144 233 377
フィボナッチは再帰することで簡単に取得できます
function printFibo($prev, $next) {
if($prev > 10000000000000) return;
$num = $prev + $next;
echo "$num<br>";
printFibo($next, $num);
}
printFibo(0, 1);