Fibonacci序列列出数字到整数

时间:2014-06-03 20:12:24

标签: php integer fibonacci

<h2>Fibonacci</h2>
        <form method="$_GET" action="Wk4.php">
            <fieldset>

                <label for="Number">Fibonacci: </label>
                <input type="text" name="Number" value="<?php echo $_GET['powerof']; ?>"/>
                <input type="submit" name='Go' value="Calculate" />
            </fieldset>
        </form>

        <?php
$message = 'The fibonacci sequence is: <br />1<br />2<br />';
$powerof = 0;
$max = 10;
$temp = $max;

if(isset($_GET['Go'])) {
    $powerof = $_GET['Go'];}else{$powerof = 2;
}

if($powerof > 100) {
    $powerof = 100;
    $message = 'Sorry, your input was too high. I converted it to the maximum value of 100.<br />The fibonacci sequence is: <br />1<br />2<br />';
}

$i = 1;

for($i;$i<$powerof;$i++){
    $max = $max * $temp;
}

$x = 1;
$y = 2;
$z = $x + $y;

echo($message);

while($z < $max) {

    $z = $x + $y; 
    echo($z."<br />"); 
    $x = $y;
    $y = $z;
}
    ?>

我试图创建一种机制,允许我在文本框中输入一个整数,然后一旦我点击按钮就会返回,列出所有斐波那契序列的数量。

1 个答案:

答案 0 :(得分:0)

现在很确定我的评论应该是一个答案,所以现在就是这样。这里有几个问题:

1)$_GET不是有效的HTTP动词。表单的method属性的有效值 * getpostputdelete'dialog'之一(HTML5 +)(所有不区分大小写)。

  • 由于method属性的默认值为空get属性method以及提供无效值时的默认值,因此保留原样可能仍然有效,但它并不是标准的,浏览器在看到可能不符合您预期的情况时会如何表现。

2)我相信你的主要问题是你在表单提交后如何检索输入。您在此行中将输入命名为powerof

<input type="text" name="powerof" value="<?php echo $_GET['powerof']; ?>"/>

因此你应该改变这个:

if(isset($_GET['Go'])) {
    $powerof = $_GET['Go'];}else{$powerof = 2;
}

对此:

if(isset($_GET['powerof'])) {
    $powerof = $_GET['powerof'];}else{$powerof = 2;
}

<强>更新

从您的评论中,我认为您没有正确回答面试的问题。此外,如果用户输入1或2,您将不会返回正确的值。 (斐波纳契序列从1,1,2,3,5,8 ** 开始,......,因此2的输入应返回1)。

尝试将while循环更改为:

$x = 0;
$y = 1;
$z = 0;
$counter = 0;

while($counter < $powerof) {
    if($counter <= 1) {
        $z = 1;
    } else {
        $z = $x + $y;
    }
    $x = $y;
    $y = $z;
    $counter++;
}

echo 'Ouput: ' . $z . "<br>";

*根据this,只有getpost在HTML v4中标准化,但今天所有其他浏览器都支持所有其他浏览器。感兴趣的读者可能会发现有关此问题的HTML v5标准的bug submission ..有趣。此外,根据HTML5 standard,还支持值'dialog'

**根据Wikipedia,序列没有“标准”起点(应该将0视为斐波那契数字吗?)。根据{{​​3}},使用0作为起点被称为“经典”定义,但使用1作为起点被称为“组合”定义。如果你提出这个问题,你可能会在面试中获得奖励积分。