Php 通过循环检查数字是否为斐波那契数
因此,我试图完成的任务是将用户输入的数字与斐波那契序列进行比较,如果是斐波那契数字,程序将返回true,如果不是,则返回false 有人能告诉我哪里出了问题吗 这是我的第一个文件:Php 通过循环检查数字是否为斐波那契数,php,html,fibonacci,Php,Html,Fibonacci,因此,我试图完成的任务是将用户输入的数字与斐波那契序列进行比较,如果是斐波那契数字,程序将返回true,如果不是,则返回false 有人能告诉我哪里出了问题吗 这是我的第一个文件: <?php function print_fibonacci($n){ $first = 0; $second = 1; echo "Fibonacci Series: \n"; echo $first.' '.$second.' '; for($i=2;$i&l
<?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后打印为真。我遇到的问题是,对于不是斐波那契数字的数字,它是真的。@aron9forever我已经移动了返回值$fib;对于非斐波那契的数字,它仍然返回true。循环结束时远远超出了预期的终止条件。嗯。。为什么要使用if($fib=$int1+$int2&&$n=$fib){
?你是说if($fib=$int1+$int2&&$n=$fib){
还是fib=$int1+$int2;if($n=$fib){
?问题是“有人能告诉我哪里出了问题吗?”–您能否解释一下为什么原始代码不起作用,您在该代码中做了哪些更改,以及为什么它工作得更好?
$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';
}