【发布时间】: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 && $n == $fib){?你的意思是if ($fib == $int1 + $int2 && $n == $fib){还是$fib = $int1 + $int2; if ($n == $fib){?