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):integer;
var f1,f2:integer;
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>