Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过循环检查数字是否为斐波那契数_Php_Html_Fibonacci - Fatal编程技术网

Php 通过循环检查数字是否为斐波那契数

Php 通过循环检查数字是否为斐波那契数,php,html,fibonacci,Php,Html,Fibonacci,因此,我试图完成的任务是将用户输入的数字与斐波那契序列进行比较,如果是斐波那契数字,程序将返回true,如果不是,则返回false 有人能告诉我哪里出了问题吗 这是我的第一个文件: <?php function print_fibonacci($n){ $first = 0; $second = 1; echo "Fibonacci Series: \n"; echo $first.' '.$second.' '; for($i=2;$i&l

因此,我试图完成的任务是将用户输入的数字与斐波那契序列进行比较,如果是斐波那契数字,程序将返回true,如果不是,则返回false

有人能告诉我哪里出了问题吗

这是我的第一个文件:

<?php
function print_fibonacci($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. */

print_fibonacci(16);

 ?>

<form method="POST" action="fibonacci3.php"><br>
<label>Input a number to check if it is fibonacci or not.</label><br>
<input name="fib" type="text" placeholder="#" /><br>
<input type="submit" value="OK!" />
</form>


输入一个数字以检查它是否为斐波那契。

这将输出斐波那契序列,直到第16个斐波那契数,然后是一个允许用户输入数字的表单

下一个文件是表单中引用的fibonacci3.php

<?php

include "fibonacci2.php";

$n = $_POST["fib"];

function fibonacci($n) {

    //0, 1, 1, 2, 3, 5, 8, 13, 21

    /*this is an error condition
    returning -1 is arbitrary - we could
    return anything we want for this
    error condition:
    */
    if((int)$n <0){
        return -1;
        echo "False";
    }

    if ((int)$n == 0){
        return 0;
        echo "0";
    }

    if((int)$n == 1 || $n == 2){
        return 1;
    }

    $int1 = 1;
    $int2 = 1;

    $fib = 0;


    for($i=1; $i<=$n-2; $i++ )
    {
        $fib = $int1 + $int2;
        //swap the values out:
        $int2 = $int1;
        $int1 = $fib;
    }

    if ($fib = $int1 + $int2 && $n == $fib){
        echo "True!";
    } else {
        echo "False!";
    }

    return $fib;

}

fibonacci((int)$n);
?>


我认为这可能是正确的,但当用户输入一个数字时,它不会输出任何内容。

您在回显之前返回一个值,因此代码永远不会运行
return$fib另外,我知道这在3后打印为真。我遇到的问题是,对于不是斐波那契数字的数字,它是真的。@aron9forever我已经移动了返回值$fib;对于非斐波那契的数字,它仍然返回true。循环结束时远远超出了预期的终止条件。嗯。。为什么要使用
if($fib=$int1+$int2&&$n=$fib){
?你是说
if($fib=$int1+$int2&&$n=$fib){
还是
fib=$int1+$int2;if($n=$fib){
?问题是“有人能告诉我哪里出了问题吗?”–您能否解释一下为什么原始代码不起作用,您在该代码中做了哪些更改,以及为什么它工作得更好?
$n = 'Your number';
$dRes1 = sqrt((5*pow($n, 2))-4);
    $nRes1 = (int)$dRes1;
    $dDecPoint1 = $dRes1 - $nRes1;
    $dRes2 = sqrt((5*pow($n, 2))+4);
    $nRes2 = (int)$dRes2;
    $dDecPoint2 = $dRes2 - $nRes2;
    if( !$dDecPoint1 || !$dDecPoint2 )
    {
        echo 'True';
    }
    else {
        echo 'False';
    }