Hola, por si les resulta de utilidad o si no las pudieron hacer, les mando esas funciones, que son bien interesantes.
1bii
function [Sn Si Sj]=SumaDR(An,Ai,Aj,Bn,Bi,Bj)
lA=length(An);
lB=length(Bn);
%Sn=[];Si=[];Sj=[];
if lA==0 || lB==0 %paso base
Sn=[An Bn]; %Sn=[An []] = An; Sn=[[] Bn] = Bn; Sn=[[] []] = []
Si=[Ai Bi];
Sj=[Aj Bj];
else %paso recursivo
if Ai(1)<Bi(1)
[Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn,Bi,Bj);
Sn=[An(1) Sn];
Si=[Ai(1) Si];
Sj=[Aj(1) Sj];
elseif Ai(1)>Bi(1)
[Sn Si Sj]=SumaDR(An,Ai,Aj,Bn(2:lB),Bi(2:lB),Bj(2:lB));
Sn=[Bn(1) Sn];
Si=[Bi(1) Si];
Sj=[Bj(1) Sj];
elseif Aj(1)<Bj(1) % A partir de aquí se cumple que Ai(1)==Bi(1)
[Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn,Bi,Bj);
Sn=[An(1) Sn];
Si=[Ai(1) Si];
Sj=[Aj(1) Sj];
elseif Aj(1)>Bj(1)
[Sn Si Sj]=SumaDR(An,Ai,Aj,Bn(2:lB),Bi(2:lB),Bj(2:lB));
Sn=[Bn(1) Sn];
Si=[Bi(1) Si];
Sj=[Bj(1) Sj];
else %Si se llega a aquí es porque Ai(1)==Bi(1) && Aj(1)==Bj(1)
[Sn Si Sj]=SumaDR(An(2:lA),Ai(2:lA),Aj(2:lA),Bn(2:lB),Bi(2:lB),Bj(2:lB));
if An(1)+Bn(1)~=0 % la suma de los números se agrega sólo si es ~=0
Sn=[An(1) + Bn(1), Sn];
Si=[Bi(1) Si];
Sj=[Bj(1) Sj];
endif
endif
endif
endfunction
1biii Atención, esta función llama a la resuelta en 1bii
function [Ps Pf Pc]=ProdDR(As,Af,Ac,Bs,Bf,Bc)
lA=length(As); lB=length(Bs);
if lA==0 || lB==0 %paso base. Si alguna de las matrices es nula, entonces el producto también lo es
Ps=[]; Pf=[]; Pc=[];
elseif lA==1 %paso recursivo. La matriz A tiene un solo elemento
[Ps Pf Pc]=ProdDR(As,Af,Ac,Bs(2:lB),Bf(2:lB),Bc(2:lB)); %Se separa a B en el 1er elemento 1 elem y el resto.
if Ac(1) == Bf(1) %Se agrega un elemento a P sólo si se cumple la igualdad
Ps=[As(1)*Bs(1) Ps];
Pf=[Af Pf];
Pc=[Bc(1) Pc];
end
else %paso recursivo. Se separa a A en el primer elemento y el resto.
[P1s P1f P1c]=ProdDR(As(1),Af(1),Ac(1),Bs,Bf,Bc); %Producto con 1 elemento
[P2s P2f P2c]=ProdDR(As(2:lA),Af(2:lA),Ac(2:lA),Bs,Bf,Bc); %Producto donde A tiene un elemento menos
[Ps Pf Pc]=SumaDR(P1s,P1f,P1c,P2s,P2f,P2c); %Se hace P1 + P2
endif
endfunction