Einführungskurs/Iteration und Rekursion in Pascal 2

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Pascal</language>
== Typische Beispiele selbstständig bearbeiten ==


=== Summe der ersten n natürlichen Zahlen ===


Schreiben Sie eine iterative sowie rekursive Funktion, die die Summe der ersten n Zahlen berechnet!

==== iterativ ====

<code id="4d349bd92e84b">
function summe_erste_n(n:integer):integer;

begin

end;
</code>


<run id="4d349bd92ea26">
writeln(inttostr(summe_erste_n(5)));
</run>


==== rekursiv ====


<code id="4d349bd92e8b2">
function su_rek(n:integer):integer;
begin

end;
</code>

<run id="4d349bd92eaa0">
writeln(inttostr(su_rek(5)));
</run>

=== Die Fibonaccizahlen ===

'''Leonardo Fibonacci di Pisa''' (* um 1180; † 1241) beschrieb die Fortpflanzung von Kaninchen mit der Zahlenfolge:

<blockquote><math>1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...</math></blockquote>

'''Definition:'''
<blockquote>
<math>\mbox{fib}(n)=\begin{cases}1,\mbox{wenn}\hspace{0.3em}n=1\\1,\mbox{wenn}\hspace{0.3em}n=2\\\mbox{fib}(n-1)+\mbox{fib}(n-2),\mbox{sonst}\end{cases}</math>
</blockquote>

'''Beschreibung:'''

''Die Kaninchenpaar bekommt nach zwei Monaten Nachwuchs (Pärchen!), dies dann jeden Monat. Die "Kinderpaare" verhalten sich genauso. Die Kaninchen leben "unendlich lange".''

Das bedeutet:

* Die ersten beiden Glieder der Zahlenfolge sind jeweils 1.
* Jedes weitere Glied ergibt sich aus der Summe seiner beiden Vorgänger.

'''''Prüfen!'''''

siehe auch [http://www.ijon.de/mathe/fibonacci/index.html]


==== iterativ ====

Zunächst eine iterative Version:

<code id="4d349bd92e910">
function fibo_it(n:integer):int64;
var f1,f2:int64;
begin
  result := 1;
  f1 := 1;
  f2 := 1;
  for n := 3 to n do
  begin
    result := f1 + f2;
    f1 := f2;
    f2 := result;
  end;
end;
</code>

<run id="4d349bd92eaff">
writeln(fibo_it(4));
</run>

==== rekursiv ====


Schreiben Sie nun eine rekursive Funktion gemäß der oberen Beschreibung:

<code id="4d349bd92e978">
function fibo_rek(n:integer):integer; 
begin
 
end;
</code>



<run id="4d349bd92eb72">
begin
write(inttostr(fibo_rek(3)));
end. 
</run>

<check>
result := (fibo_rek(3) = 2) and (fibo_rek(6) = 8);
</check>