У меня есть подпрограмма, которая работает с двумя. Можно ли вызвать подпрограмму подпрограммой?Как умножить более чем на 2 матрицы в одной функции? PERL
0
A
ответ
3
Самый простой способ немного рекурсии — просто изменить:
my $ref1 = $_[0];
my $ref2 = $_[1];
к этому:
my $ref1 = shift;
my $ref2 = shift;
и это:
return @product;
к этому:
if(@_ > 0)
{ return &matrix(\@product, @_); }
else
{ return @product; }
Но самый эффективный способ - начать с изучения размеров различных массивов и тем самым определить наилучший порядок выполнения умножений. (Массивное умножение, хотя и не коммутативное, ассоциативно, и если не все массивы имеют одинаковые размеры, то A(BC)
может быть намного дороже или намного дешевле, чем (AB)C
.Например, если размеры 1-на-100 , 100 на 1 и 1 на 100, то (AB)C
создает промежуточную стадию матрицу 1 на 1, тогда как A(BC)
создает промежуточную стадию матрицу 100 на 100.)
вам необходимо не изменять подпрограмму –
возможный дубликат [Как умножить более двух матриц в perl?] (http://stackoverflow.com/questions/9475424/how-do-i-multiply-more-than-two-matrices- в-Perl) – Toto