Rekursive Prozeduren 2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
===Aufgabe 1:===
Schreiben Sie eine rekursive Prozedur <tt>fak</tt>, die eine Zahl als Argument erwartet
und deren Fakultät als Ergebnis liefert.
<code>;Ihre Fakultätsprozedur fak</code>
<eval>(fak 5)</eval>
===Aufgabe 2:===
Schreiben Sie eine rekursive Prozedur <tt>fib</tt>, die die n-te Fibonaccizahl als Ergebnis
liefert.
'''Hinweis:''' Die n-te Fibonaccizahl errechnet sich aus der Summe ihrer beiden
Vorgänger.
<code>;Ihre Fibonacci-Prozedur fib</code>
<eval>(fib 5)</eval>
===Aufgabe 3:===
Schreiben Sie eine rekursive Prozedur <tt>fibonacci_list</tt>, die eine Liste mit den
ersten <tt>n</tt> Fibonaccizahlen zurückgibt.
'''Hinweis:''' Verwenden Sie zur Lösung dieser Aufgabe Ihre Prozedur <tt>fib</tt> aus der
vorherigen Aufgabe!
<code>;Ihre Prozedur fibonacci_list</code>
<code hidden>
(define listvergleich
(lambda(l1 l2)
(cond
((not (= (length l1) (length l2)) #f)
)
</code>
<eval>(fibonacci_list 5)</eval>
===Aufgabe 4:===
Schreiben Sie eine Prozedur ascending, die eine Liste nimmt und #t zurückgibt,
falls die Listenelemente aufsteigend geordnet sind, ansonsten #f.<br/>
'''Hinweis:''' Beachten Sie das Resultat für die leere Liste ’().
'''Aufrufbeispiele:'''
{|
|-
|<tt>
<br/>> (ascending ’(1 2 4 7))<br/>#t
<br/>> (ascending ’(1 3 4 5 2 6))<br/>#f
<br/>> (ascending ’())<br/>#t
</tt>
|}
<code>;Ihre ascending-Prozedur</code>
<eval>;Aufrufbeispiel zum Testen Ihrer Prozedur
(ascending '(1 2 8))</eval>
<check>
(and (ascending '()) (ascending '(1 5 7 9)) (not (ascending '(1 3 4 2 8))))
</check>
===Aufgabe 5:===
Schreiben Sie eine Prozedur <tt>my-length</tt>, die eine Liste als Argument nimmt und
die Anzahl der Elemente in der 1. Ebene ausgibt. Die eingebaute Prozedur '''length''' darf dabei nicht verwendet werden!
Aufrufbeispiele:
{|
|-
|<tt>
> (my-length ’(1 2 3 4 5))
5
> (my-length ’(1 2 3 4 5 (6 7) (8 (9 10 (11))))
7
</tt>
|}
<code>;Ihre Prozedur my-length</code>
<eval>;Aufrufbeispiel zum Testen Ihrer Prozedur
(my-length '(1 2 3 4 5 6 (7 2) 8))</eval>
<check>(and (= (my-length '(1 2 4)) 3) (= (my-length '(1 (1 2) (2 3) 5)) 4) (= (my-length '()) 0))</check>
===Aufgabe 6:===
Schreiben Sie eine weitere Prozedur <tt>deep-length</tt> die ebenfalls eine Liste als Ar-
gument nimmt, jedoch die Anzahl aller Elemente in sämtlichen Teillisten ausgibt.
Aufrufbeispiele:
{|
|<tt>
> (deep-length ’(1 2 3 4 5))
5
> (deep-length ’(1 2 3 4 5 (6 7) (8 (9 10 (11))))
11
</tt>
|}
<code>;Ihre Prozedur deep-length</code>
<eval>;Aufrufbeispiel zum Testen Ihrer Prozedur
(deep-length '(1 (2 3) (3 (5 7))))</eval>
<check>(and (= (deep-length '()) 0) (= (deep-length '(1 2 3 4 5)) 5) (= (deep-length '(1 2 (3 4 (5 6)) 7 8)) 8))</check>