【问题标题】:Checking if a number is a Fibonacci number through a loop通过循环检查数字是否为斐波那契数
【发布时间】:2016-02-29 00:55:47
【问题描述】:

所以我在这里要完成的任务是将用户输入的数字与斐波那契数列进行比较,如果是斐波那契数,程序将回显真,否则将回显假。

谁能告诉我哪里出错了?

这是我的第一个文件:

<?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 之后打印为 true。我遇到的问题是它对于非斐波那契数字的数字打印为 true。
  • @aron9forever 我已经移动了 return $fib;到序列之后,对于非斐波那契数,它仍然返回 true。
  • 循环结束的方式超出了预期的终止条件。 This snippet works.
  • Ehm.. 你为什么使用if ($fib = $int1 + $int2 &amp;&amp; $n == $fib){?你的意思是if ($fib == $int1 + $int2 &amp;&amp; $n == $fib){ 还是$fib = $int1 + $int2; if ($n == $fib){

标签: php html fibonacci


【解决方案1】:
$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';
    }

【讨论】:

  • 问题是 “有人能告诉我哪里出错了吗?” - 你能解释一下为什么原始代码不起作用,你在这方面做了什么改变代码以及为什么效果更好?
猜你喜欢
  • 2017-03-31
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 2016-04-28
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多