Задача 4. Вывести на экран n-ное число Фибоначчи.

Задача из этого списка.

<?php
/* Вывести на экран n-ное число Фибоначчи*/
function fibonachi($numbers) {
	$numbers = 10; //задаём сколько нужно вывести чисел
	$a = 0;
	$b = 1; 
	if ($numbers <= 1) {
	echo "$a<br>";
    }
	else {
		echo "$a<br>$b<br>";
	}
	for($numbers; $numbers > 2; $numbers--) { //цикл начинает работу с N > 2
		$sumNumbers = $a + $b;
		$a = $b;
		$b = $sumNumbers;
		echo "$sumNumbers<br>";
	}
}
fibonachi($numbers);
?>

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

/* Вывести на экран n-ное число Фибоначчи*/
function fibonachi($numbers) {
    $numbers = 10; //задаём сколько нужно вывести чисел
    $a = 0;
    $b = 1; 
    if ($numbers <= 1) {
    echo "$a<br>";
    }
    else {
        echo "$a<br>$b<br>";
    }
    for($numbers; $numbers > 2; $numbers--) { //цикл начинает работу с N > 2
        $sumNumbers = $a + $b;
        $a = $b;
        $b = $sumNumbers;
        echo "$sumNumbers<br>";
    }
}
fibonachi($numbers);
  1. 4-ая строка лишняя. Число элементов вы задаёте в качестве аргумента функции.
  2. оформление уровней вложенности (стр.8)
  3. а если передать в функцию 0? должны ли выводиться числа?
Sver4ok's picture

Вроде поменял всё.

<?php
/* Вывести на экран n-ное число Фибоначчи*/
function fibonachi($numbers) {
	$numbers = 10; //задаём сколько нужно вывести чисел
	$b = 1; 
	if ($numbers < 1) {
		echo "Введите число больше нуля.";
    }
	else {
		echo "$b<br>";
	}
	for($numbers; $numbers > 1; $numbers--) { //цикл начинает работу с N > 2
		$sumNumbers = $a + $b;
		$a = $b;
		$b = $sumNumbers;
		echo "$sumNumbers<br>";
	}
}
fibonachi($numbers);
?>
melisa's picture

  1. function fibonachi($numbers) {
        $numbers = 10; //задаём сколько нужно вывести чисел

    Зачем вы обернули код в функцию,если переопределяете её агрумент ($numbers) внутри?

  2. На данный момент, какой бы аргумент вы не передали outputSumRandomNumbers(), она будет выводить 10 чисел.
  3. Обязательно запускайте код для проверки. Можно так.
    Похоже при редактировании вы случайно удалили $a, и получили предупреждение:

    E_NOTICE : type 8 -- Undefined variable: a -- at line 12

Sver4ok's picture

Похоже при редактировании вы случайно удалили $a

Не случайно, вы сказали что:

4-ая строка лишняя. Число элементов вы задаёте в качестве аргумента функции.

А 4-я строка это:

 $a = 0;

Вы наверное имели ввиду 3-ю строку удалить.
Код поправил:

<?php
/* Вывести на экран n-ное число Фибоначчи*/
function fibonachi($numbers) {
	$numbers;
	$a = 0;
	$b = 1; 
	if ($numbers < 1) {
		echo "Введите число больше нуля.";
    }
	else {
		echo "$b<br>";
	}
	for(; $numbers > 1; $numbers--) { //цикл начинает работу с N > 2
		$sumNumbers = $a + $b;
		$a = $b;
		$b = $sumNumbers;
		echo "$sumNumbers<br>";
	}
}
fibonachi(10);
?>
melisa's picture

  1. Не случайно, вы сказали что:

    4-ая строка лишняя. Число элементов вы задаёте в качестве аргумента функции.

    Прошу прощения, действительно, в моей цитате получилась 3-я. Я смотрела на код, который вы выложили изначально. Там 4 строка такая:

    $numbers = 10; //задаём сколько нужно вывести чисел
  2. Пожалуйста, поясните значение строки:
    $numbers;
  3. Не стесняйтесь указывать на неточности). Если вам не понятна суть замечания, лучше уточнить. Вот теперь такой вопрос: почему эта строка лишняя?
    $numbers = 10; //задаём сколько нужно вывести чисел
Sver4ok's picture

Вот теперь такой вопрос: почему эта строка лишняя?

Конечно не нужна эта строка, никогда не любил её :)
Потому что очевидно же что значение нужно вводить при вызове функции, а не внутри. Переделал.

<?php
/* Вывести на экран n-ное число Фибоначчи*/
function fibonachi($numbers) {
	$a = 0;
	$b = 1; 
	if ($numbers < 1) {
		echo "Введите число больше нуля.";
    }
	else {
		echo "$b<br>";
	}
	for(; $numbers > 1; $numbers--) { //цикл начинает работу с N > 2
		$sumNumbers = $a + $b;
		$a = $b;
		$b = $sumNumbers;
		echo "$sumNumbers<br>";
	}
}
fibonachi(10);
?>
melisa's picture

принято