function [Q,R]=fatt_qr(A)
%[Q,R]=fatt_qr(A) 
%calcola la fattorizzazione QR della matrice quadrata A

n=size(A,1);
if (n==1) %se la dimensione di A e' 1, allora A e' gia' in forma QR, con Q=1 ed R=A
    Q=1;
    R=A;
else
    c=A(:,1); %prima colonna di A
    v=[norm(c); zeros(n-1,1)]-c; %vettore v della matrice di Householder
    H=eye(n)-2*v*v'/norm(v)^2; %matrice di Householder
    A2=H*A; %calcola la matrice A trasformata
    Asucc=A2(2:n,2:n); %estrai la sottomatrice successiva
    [Qsucc,Rsucc]=fatt_qr(Asucc); %continua il calcolo ricorsivamente
    Q=H*blkdiag(1,Qsucc); %componi la matrice H
    R=[A2(1,:); A2(2:n,1) Rsucc]; %ricomponi la matrice R
end
