【问题标题】:Fibonacci Sequence listing numbers upto integer斐波那契数列列表数字高达整数
【发布时间】:2014-06-03 20:12:23
【问题描述】:
<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;
}
    ?>

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

【问题讨论】:

  • 表单的方法应该是"get"而不是$_GET。 'go' 也是您提交按钮的名称,其值为'Calculate',因此$powerof 将是一个字符串而不是整数。
  • 欢迎来到 SO!请描述究竟是什么不起作用。错误的结果?错误信息?
  • 表格只是不做任何事情将不起作用或返回序列到所述数字
  • This is why 或者一个重要的原因。
  • 不,它肯定需要是一个整数,我只是在挣扎,因为我不知道我的表单的哪些部分应该被称为我刚刚尝试将其重命名为 powerof 以尝试使其工作

标签: php integer fibonacci


【解决方案1】:

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

1) $_GET 不是有效的 HTTP 动词。表单的方法属性的有效值* 是 get、post、put、delete 和 '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;
}

更新

从您的 cmets 来看,我认为您在面试中没有完全正确地回答问题。此外,如果用户输入 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 的说法,只有get 和post 在HTML v4 中被标准化,但现在所有主要浏览器都支持所有其他的。感兴趣的读者可能会发现bug submission 与此问题相关的 HTML v5 标准.. 很有趣。另外,根据HTML5 standard,也支持'dialog'的值。

** 根据Wikipedia,序列没有“标准”起点(是否应将 0 视为斐波那契数?)。根据this answer,以0为起点被称为“经典”定义,而以1为起点被称为“组合”定义。如果你提出来,你可能会在面试中获得加分。

【讨论】:

  • 我会试试这个然后给你结果非常感谢你的帮助,因为我需要做和学习这个面试,老实说我不知道​​如何写这个序列到 php 我一直在苦苦挣扎
  • 它可以工作,但是有一个问题,我看不出是什么让它这样做,当我输入任何数字时,它会列出 5 个数字,例如,如果我说 1,它会正常显示 1 2 3 5 8 13而如果我说 2 它列出 1 3 5 8 13 21 34 55 89 144 而不是 13 之后的 2 个数字
  • 我认为这个问题可能与您设置$max 的方式有关。你到底想做什么?如果你输入 2 是否意味着我想要前 2 个斐波那契数,还是我想要所有小于或等于 2 的斐波那契数?
  • 1.创建一个机制来传递一个正整数并在斐波那契数列中返回该值。这就是我试图围绕我的代码建模的问题
  • 这仍然有点模棱两可,但我读到 2 的输入应该返回第二个斐波那契数(即 1)
猜你喜欢
  • 2015-06-05
  • 2017-07-08
  • 2013-08-12
  • 1970-01-01
  • 2018-01-30
  • 2013-08-03
  • 2014-05-19
相关资源
最近更新 更多