y a = y a
a = четное число
b = следующее нечетное число (другими словами a + 1)
Таким образом, если вы хотите, чтобы приведенное выше уравнение выражалось только в виде четных чисел («а»), когда им задано нечетное число («б»), вы можете сделать следующее:
y b =y (a + 1) = y * a + y
Теперь запутайте всех, написав 'a' как 2 * (z / 2).
y * a становится (2* y) * (z / 2)
y * b становится ((2 * y) * (z / 2)) + y
, поскольку в формуле для обоихчетные и нечетные числа, мы хотим думать, что код говорит нам, что (2 * y) * (z / 2) = (2 * y) * (z / 2) + y, что, очевидно, безумие!
Причина в том, что мы поняли, что z / 2 является целым числом, поэтому z никогда не может быть нечетным.Компилятор не позволит нам присвоить z / 2 целому числу, если z нечетно.Если мы попытаемся сделать 'z' нечетным, целое число, которое мы на самом деле будем использовать, это (z-1) / 2 вместо z / 2.
Чтобы обойти это, мы должны проверить, чтобы увидеть, является ли z/ 2 нечетно и выбираем нашу формулу на основе этого (например, y a или y b в терминах 'a').
В мульт (y, z) оба 'y'и' z 'оба являются целыми числами.Используя приведенные выше символы, mult (2 * y, b / 2) становится mult (2 * y, a / 2), потому что компилятор урезает b / 2 до a / 2.
Поскольку мы всегдасобираясь получить «a» в качестве параметра для «mult», даже когда мы отправляем «b», мы должны убедиться, что мы используем только формулы, которые требуют «a».Таким образом, вместо y b мы используем y a + 1, как описано выше.
b / 2 = a / 2 + 1/2, но 1/2 не может быть представлено как частьвнутр.