Задать вопрос
@XXX-prog

Чем отличается «--$x» от «$x — 1» в данном контексте?

Чем отличается --$x от $x - 1 в данном контексте? Если ничем, почему --$x ломает рекурсивную функцию?

function fac($x) {
		if($x === 0){
			return 1;
		}
		return $x * fac($x - 1); // --$x, $x - 1
	}
  • Вопрос задан
  • 239 просмотров
Подписаться 2 Простой Комментировать
Ответ пользователя D3lphi К ответам на вопрос (2)
@D3lphi
Как это ничем?
--$x производит декремент переменной, а затем передает её в качестве аргумента функции.
$x - 1 передает функции значение, полученное при декременте переменной $x.
Таким образом, в первом случае изменяется значение самой переменной, во втором - нет. А так как значения выражения вычисляются справа налево (для получения результата выражения необходимо сначала выполнить функцию), то в вашем примере, выделенный жирным $x, $x * fac(--$x) будет иметь значение, уже уменьшенное на единицу.
Ответ написан