【问题标题】:Finding the Nth Fibonacci number through input field PHP通过输入字段 PHP 查找第 N 个斐波那契数
【发布时间】:2016-03-24 01:37:42
【问题描述】:

我在让输入代码与方程式一起工作时遇到了一些问题。我已经尝试了一段时间(我是编码新手)和搜索,但无法以任何方式使其工作。这就是我最终的结果。谁能帮我?提前致谢。

<!DOCTYPE HTML>
<html> 
<body>

<form action="" method="post">
<br />Choose a number to be the nth in the Fibonacci sequence: <input type="number" name="fibnum">
<input type="submit">
</form> <br /> <br />

<?php


if(isset($_POST['fibnum'])){


    $fibnum = $_POST['fibnum'];


    function fibRec($fibnum){

        if ($fibnum < 0){
        echo "There are no Fibonacci numbers of negative values.";
        }
            elseif ($fibnum == 0){

                echo "0";
            }

                elseif ($fibnum == 1){

                    echo "1";
                }

                    else {

                        $sum = fibRec($fibnum-1)+fibRec($fibnum-2); 
                        echo $sum;
                    }

    }
        $fib = fibRec($fibnum); 
        echo $fib;          

}           
?>    

</body>
</html>

【问题讨论】:

  • 你能发布你得到的错误,post数组有fibnum变量吗?

标签: php input field fibonacci


【解决方案1】:

要使其正常工作,您需要做的就是将回声更改为返回,如下所示:

<?php
$_POST['fibnum']=11;

if(isset($_POST['fibnum'])){


    $fibnum = $_POST['fibnum'];


    function fibRec($fibnum){

        if ($fibnum < 0){
        return ( "There are no Fibonacci numbers of negative values.");
        }
            elseif ($fibnum == 0){

                return ("0");
            }

                elseif ($fibnum == 1){

                    return ("1");
                }

                    else {

                        $sum = fibRec($fibnum-1)+fibRec($fibnum-2); 
                        return ($sum);
                    }

    }
        $fib = fibRec($fibnum); 
        echo $fib;          

}           
?>  

工作演示:http://ideone.com/e0xeY7

【讨论】:

  • 非常感谢!另外,当我输入更高的数字时,加载需要很长时间,我可以让它更快吗?
  • 如果我需要这个,我不会即时计算,而是将前一百万放入 db 表中
  • 我需要用 SQL 把这段代码变成一个 db 表吗?
  • 需要吗?这完全是您的电话 ☺ 如果没有在线电话,我不会感到惊讶
【解决方案2】:

您将整数推入回声。在递归公式中,返回值会返回到调用实体,而不是自动在函数之外。

看看这个:

<!DOCTYPE HTML>
<html> 
<body>

<form action="" method="post">
<br />Choose a number to be the nth in the Fibonacci sequence: <input type="number" name="fibnum">
<input type="submit">
</form> <br /> <br />

<?php


if(isset($_POST['fibnum'])){


    $fibnum = $_POST['fibnum'];


    function fibRec($fibnum){

        if ($fibnum < 0){
        echo "There are no Fibonacci numbers of negative values.";
        }
            elseif ($fibnum == 0){

                return 0;
            }

                elseif ($fibnum == 1){

                    return 1;
                }

                    else {

                        $sum = fibRec($fibnum-1)+fibRec($fibnum-2); 
                        return $sum;
                    }

    }
        $fib = fibRec($fibnum); 
        echo $fib;          

}           
?>    

</body>
</html>

【讨论】:

    【解决方案3】:

    您还可以使用与黄金比例相关的PHI 常数来计算第 n 个斐波那契数。认为直到第 5 次迭代的斐波那契数不符合黄金比例,因此您可以如下所示:

    <?php 
    
    $fibnum = intval($_POST['fibnum']);
    
    const PHI = 1.6180339887;
    $f = [0, 1, 1, 2, 3];
    
    echo getNthFibo($fibnum);
    
    function getNthFibo($i)
    {
        if($i < 5){
            return $f[$i];
        }
    
        // Starting from 5th iteration of fibo function
        $n = 5;
        $fn = 3;
    
        while ($n < $i) { 
            $fn = round($fn * PHI); 
            $n++; 
        }
    
        return $fn; 
    }
    

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2012-10-12
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多