- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function mux(a,b:integer):integer;
begin
if a=1 then mux:=b
else if (a=0) or (b=0) then mux:=0
else if (a<0) and (b<0) then mux:= mux(-b-1, -a) - a
else
mux:= mux(b-1, a) + a;
end;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−17
function mux(a,b:integer):integer;
begin
if a=1 then mux:=b
else if (a=0) or (b=0) then mux:=0
else if (a<0) and (b<0) then mux:= mux(-b-1, -a) - a
else
mux:= mux(b-1, a) + a;
end;
Лабораторная работа. Умножение чисел.
a и b образуют двумерное пространство. Сначала оттуда вырезали a=1, затем - a=0 or b=0, затем a<0 and b<0. Пространство немного уменьшилось. В итоге остались варианты a<0 and b>0 и a>1 and b<>0, для которых применяется формула mux:= mux(b-1, a) + a. Чему равно mux(-1, 10)?
Хорошо, а чему равно mux(10, -1)?
З.Ы. Строку 3, походу, можно выбросить.
Если лень думать - держи тест: http://ideone.com/KLS66y
Не осознал, что (а) a и b меняются местами, (b) из-за этого они постоянно крутятся, из-за чего положительное раз в две итерации уменьшается и рано или поздно становится нулём.
Код - не из очевидных, я бы переписал.
Согласен. Я сначала тоже думал, что он забагован.
Где здесь мультиплексор, untitled_001?
Какой еще нахуй мух?)))
Кстати по сабжу - классическое умножение на числах Пеано