Я играю с последовательностью Фибоначчи, используя PHP. Я понимаю концепцию рекурсивных функций, но я не понимаю, что здесь происходит.
Код:
function fs($n) {
if ($n < 1) {
return 1;
} // if
echo " n is " . $n . "<br>";
echo fs($n - 1) + fs($n - 2) . " when n is " . $n . "<br>";
} // function
echo fs(3);
И вот возвращение:
n is 3
n is 2
n is 1
2 when n is 1
1 when n is 2
n is 1
2 when n is 1
0 when n is 3
Ваш function
, если вход меньше 1 вернет 1. В противном случае он напечатает значение входа и рекурсивно вызовет функцию для более низких значений. Поскольку для -1 он вернет 1, вы получите неправильные значения. Давайте назовем это с 1. Он будет называть это для 0 и -1, возвращая 1 для каждого и добавляя их, в результате 2, что неверно. Вам нужно реализовать это по-другому:
function fs($n){
if ($n<=1) {
return 1;
}
echo fs($n-1)+fs($n-2) ." when n is ".$n. "<br>";
} //function
fs(3);
Это решит проблему.
Других решений пока нет …