Хм, это очень широкий вопрос.
Так как вы просите базового понимания операторов языка. Я постараюсь объяснить вам все это, но я бы порекомендовал вам пройти официальное введение в курс программирования.
В Scala все является выражением. Таким образом, сама функция является выражением, которое оценивает присвоенный блок .
. В этом случае блок является просто выражением if / else
, которое принимает предикат чтобы решить, какую из двух ветвей выбрать. В этом случае n == 1
проверяет, равно ли n
равному 1
, если это правда, то возвращает 1
, если нет, возвращает n * fact(n -1)
.
Таким образом, если мы выполним алгоритм самостоятельно, используя «эквациональное рассуждение» , мы сможем понять, как он работает.
fact(3) = if (3 == 1) 1 else 3 * fact(3 - 1) // replace n in the block.
fact(3) = 3 * fact(2) // reduce the if and the subtraction.
fact(3) = 3 * (if (2 == 1) 1 else 2 * fact(2 - 1)) // expand the fact definition.
fact(3) = 3 * (2 * fact(1)) // reduce the if and the subtraction.
fact(3) = 3 * (2 * (if (1 == 1) 1 else 1 * fact(1 - 1))) // expand the fact definition.
fact(3) = 3 * (2 * (1)) // reduce the if.
fact(3) = 6 // reduce the multiplications.