%% 34   Rekursivt definierade funktioner
%
% Anta att du vill beräkna 14 fakulet, dvs 14!. Det är produkten av alla heltal mellan 1 och 14. Matlab har en inbyggd funktion  factorial som du kan använda.
% Testa nu det, men också att beräkna 14! utan  factorial .



% Ett sätt att definiera n!\, i matematik är att skriva
% n!= 1\cdot 2\cdot 3 \cdots (n-1)\cdot n\,,
% där n\, är ett positivt heltal (man sätter på goda grunder 0!=1\,).
% Ett annat är
% \begin{array}{rcl}
% 0! & = & 1 \, \mbox{ och } \\
% n! & = & n\cdot (n-1)! \, \mbox{ när } n>0\,.
% \end{array}
% Tänk på fakultet som en funktion f(n)\,. I det andra fallet anger man hur man ska beräkna f(n)\, med hjälp av f:s värde i mindre tal ( i detta fall enbart n-1). Att definiera f(n)\,på detta vis kallas att göra en rekursiv definition: Man definierar funktionen genom att i definitionen använda funktionen själv på tidigare (mindre) värden. En rekursiv defintion av en funktion innehåller
% Ett eller flera basfall där man explicit talar om funktionens värde/värden. I detta fall att 0!=1\,.
% En rekursionsformel som talar om hur funktionens värde annars beräknas med funktionens värde(n) i tidigare tal.  I detta fall att n!=n\cdot(n-1)! när n>0\,.
% I Matlab kan det se ut så här:
%    function resultat = fakultet( n )
%      % Kollar först att n är ett icke-negativt heltal. Om inte: varning!
%    if n < 0 |  floor(n) ~= n
%      % "|" är "or", "~" är "not" , "floor" är heltalsdelen (när n>=0)
%      message=strcat( num2str(n) , 'is not a non-negative integer!') ;
%      % "strcat är "string concatenation" dvs sammansättning av text-strängar.    "num2str" gör en sträng av ett tal.
%      disp( message ) ; % Display av meddelande i kommandofönster
%      return  % Avbryter exekvering av kod
%    end
%    % Nu den rekursiva definitionen
%    if n == 0
%       resultat = 1 ;
%    else
%       resultat = n * fakultet( n - 1) ;
%    end
% Koden sparas i en fil med namn  fakultet.m  (samma namn som funktionen) i Matlabs sökväg.
% Testa nu att använda  fakultet  för att beräkna 14!\,.



%
% Uppgift 34.1    Definiera funktionen f(n) = 2^n\, rekursivt för icke-negativa heltal i en m-fil  och beräkna 2^{14}\, med hjälp av den.
% Lösning



%
% Uppgift 34.2    Definiera funktionen f(a,n) = a^n\, rekursivt för icke-negativa heltal n\, i en m-fil  och beräkna 3^{9}\, med hjälp av den.
% Lösning



%
% Uppgift 34.3    Definiera funktionen  pascal( n ) som till det positiva heltalet  n  resulterar i den rad i Pascals triangel som innehåller koefficienterna i utvecklingen av (x+y)^n\,.  Beräkna koefficienterna när n=8\,
%
% Lösning   Pascals triangel börjar
% \begin{array}{rccccccccc}
% n=0:&    &    &    &    &  1\\
% n=1:&    &    &    &  1 &    &  1\\
% n=2:&    &    &  1 &    &  2 &    &  1\\
% n=3:&    &  1 &    &  3 &    &  3 &    &  1\\
% n=4:&  1 &    &  4 &    &  6 &    &  4 &    &  1
% \end{array}
% Talet på en position på nästa rad fås genom att man summerar de två tal som står närmast till vänster och höger om den på raden ovan. Om  r_{n-1}\,är radvektorn med talen på rad n-1\, betyder det att  r_n=[0\ r_{n-1}]+[r_{n-1}\ 0]\,. T.ex
% \begin{array}{lrrrrrr}
%  & 0 & 1 & 3 & 3 &  1 \\
%  & 1 & 3 & 3 & 1 & 0 \\
%  + \\
%  & 1 & 4 & 6 & 4 & 1 \\
% \end{array}



%
%